【问题标题】:how to change listview data on spinner selection?如何更改微调器选择的列表视图数据?
【发布时间】:2016-01-16 13:10:02
【问题描述】:

我在视图中有一个微调器和一个列表视图。数据都来自 sqlite 。 微调器数据来自类别表(Cid,Cname)Cname 显示在微调器中,列表视图数据来自项目表(Iid,Iname,Cid)Iname 显示在列表视图中。 cid 是项目表中的外键。当微调器选择更改时,我想更改列表视图数据。这是我到目前为止所做的.. 下面是我从 sqlite 填充 Cname 的微调器

      spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, final int position, long id) {                                                    dbRepo = new DBRepo(getApplicationContext());                    
            String pos = (String) parent.getSelectedItemPosition();              
            String cid =   dbRepo.getId(pos);
            Toast.makeText(getApplicationContext(), cid, Toast.LENGTH_LONG).show();
            final ArrayList<Support> list = dbRepo.getItems(cid);

                adapter = new Custom(Category.this, R.layout.view_entry, list);

                lv.setAdapter(adapter);                  
               adapter.notifyDataSetChanged();

这是在微调器中获取所选项目的cid的代码

public  String getId(String selected) {
    SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT Cid from Catogeries where Cname=\"" + selected+ "\"";
    Cursor c = db.rawQuery(query, null);
    String s = null;

    if (c.moveToFirst()) {
        while (c.moveToNext()) {
            s = c.getInt(c.getColumnIndex("Cid"));

        }
    }
    c.close();
    db.close();
    Log.e("CID", " " + s);

    return s;
}

这是从db中获取listview中数据的方法

 public ArrayList<Support> getItems(String cid){
   ArrayList<Support> list = new ArrayList<Support>();
    SQLiteDatabase db = this.getReadableDatabase();
  // Cursor c = db.query(TABLE_ITEM, new String[]{KEY_IID, KEY_INAME, KEY_CID}, KEY_CID + "=?", new String[]{cid}, null, null, null,null);
    String select = "SELECT * from items_table where Cid = "+cid;
    Cursor c = db.rawQuery(select, null);
    String res;
    int j = c.getColumnIndex(Support.KEY_INAME);
    if(c.moveToFirst()){
        do {
            Support item = new Support();
                    item.setItemID(c.getString(0));
                    item.setItemName(c.getString(1));
                    item.setCategoryID(c.getString(2));
                    list.add(item);
        }while (c.moveToNext());
    }
    c.close();
    db.close();
    return list;
}

现在 cid 显示在 toast 中,但是在将 cid 传递给 getitems() 以获取项目后,listview.cid 中没有显示任何内容,而日志中的 getItems() 中没有显示

   public ArrayList<Support> getItems(String cid) {
    ArrayList<Support> itemlist = new ArrayList<Support>();
    SQLiteDatabase db = this.getReadableDatabase();
    Log.e("CID is", cid);
    String selectQuery = "SELECT * FROM " + TABLE_ITEM;
    Cursor c = db.rawQuery(selectQuery, null);
    if (c != null) {
        while (c.moveToNext()) {
            Support item = new Support();
            item.setItemID(c.getString(0));
            item.setItemName(c.getString(1));
            item.setCategoryID(c.getString(2));
            itemlist.add(item);
        }
    }
    c.close();
    db.close();
    return itemlist;
}

上面的代码在没有传递 cid 的情况下显示项目,但是当我传递 cid 时,listview 显示为空,并且它们在 logcat 中没有显示错误

终于解决了我的问题,这是因为 cid 使用 trim 函数存储从 web 服务获取的数据到 sqlite 后的空间已经为我完成了

【问题讨论】:

  • getId 正在抛出 nullpointerException
  • 这可能会有所帮助。 stackoverflow.com/questions/4313987/…
  • 感谢您的回复,我会检查的
  • 不,那是关于 cursurAdapter 我没有使用 cursuradpater
  • @John Joe 现在检查代码

标签: listview arraylist android-sqlite spinner android-spinner


【解决方案1】:
public ArrayList<Support> getItems(String cid){
   ArrayList<Support> list = new ArrayList<Support>();
   SQLiteDatabase db = this.getReadableDatabase();

  Cursor cursor = database.rawQuery(SELECT * FROM items_table WHERE Cid =? ",  new String[]  {cid}, null);

   Support item = new Support( ); 
if(cursor!=null)
{
  while(cursor.moveToNext())
{
   String ID= cursor.getString(cursor.getColumnIndexOrThrow(YOUR_DatabaseHelper.id_column));
   // same with the others
   item.add(ID);
   list.add(item);
}
}
    cursor.close();
    db.close();
    return list;
}        

【讨论】:

  • 我会检查并通知您结果并感谢您的帮助
  • item.add(ID) 显示错误。并将 id 添加到 item.setItem(ID) 然后 list.add(item) 是允许的,但 listview 再次为空
  • 做个简单的检查,在String ID后面加上log.e("ID",ID),看看日志显示什么
  • 我认为光标为空日志未显示,但顶部的日志显示 cid
  • cid 在 getItems 方法中显示什么?你可以检查吗 ? 不传递 cid 会在 logcat 中显示 id 你的意思是显示 ID?
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多