如何更改微调器选择的列表视图数据?
how to change listview data on spinner selection?
我在视图中有一个微调器和一个列表视图。数据来自 sqlite 。
微调器数据来自类别 table(Cid, Cname) Cname 将显示在微调器中,列表视图数据来自项目 table(Iid, Iname, Cid) Iname 将显示在列表视图中。 cid 是项目 table 中的外键。当微调器选择更改时,我想更改列表视图 data.this 是我到目前为止所做的。
下面是我的微调器,其中 Cname 从 sqlite
填充
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
中没有显示错误
终于解决了我的问题,因为 space 在 cid 使用 trim 函数同时将从 webservice 获取的数据存储到 sqlite 后
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;
}
我在视图中有一个微调器和一个列表视图。数据来自 sqlite 。 微调器数据来自类别 table(Cid, Cname) Cname 将显示在微调器中,列表视图数据来自项目 table(Iid, Iname, Cid) Iname 将显示在列表视图中。 cid 是项目 table 中的外键。当微调器选择更改时,我想更改列表视图 data.this 是我到目前为止所做的。 下面是我的微调器,其中 Cname 从 sqlite
填充 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
中没有显示错误终于解决了我的问题,因为 space 在 cid 使用 trim 函数同时将从 webservice 获取的数据存储到 sqlite 后
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;
}