使用 arrayList<String> 填充 ListView使用从游标获得的数据 [英] Populate ListView with an arrayList<String> with data obtained from a cursor
问题描述
Helo 我正在尝试使用存储在 sqLite 中的数据填充 listView.选择产品后,我希望该产品的所有参考资料像我在图片中画的那样走在同一条线上.
Helo i am trying to populate a listView with data stored in a sqLite. After i select a product i want all the reference of that product to go on the same line like i drew in the picture.
我可以让 ArrayAdapter 把所有的记录在同一个 xml 中?
Can i make the ArrayAdapter put all records in the same xml?
我的代码是这样的:返回所有记录的游标:
My code looks like this: The cursor that returns all records:
public Cursor getAllRows() {
String where = null;
// query the DBAdapter
Cursor cursor = db.query(true, TABLE_NAME, ALL_KEYS, where, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
向arrayList添加数据:
Adding data to arrayList:
public ArrayList<String> fromCursorToArrayListString(Cursor c){
ArrayList<String> result = new ArrayList<String>();
c.moveToFirst();
for(int i = 0; i < c.getCount(); i++){
String row_PRODUCT = c.getString(c.getColumnIndex(KEY_PRODUCT));
String row_PRICE = c.getString(c.getColumnIndex(KEY_PRICE));
String row_TYPE = c.getString(c.getColumnIndex(KEY_TYPE));
result.add(row_PRODUCT);
result.add(row_PRICE);
result.add(row_TYPE);
c.moveToNext();
}
return result;
}
在 mainActivity 我写了这个:
In the mainActivity i wrote this:
ListView listView = (ListView) findViewById(R.id.new_list_listView);
Cursor cursor = newListDBAdapter.getAllRows();
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.custom_product_layout_new_list,R.id.custom_product_layout_new_list_productName,newListDBAdapter.fromCursorToArrayListString(cursor));
listView.setAdapter(arrayAdapter);
推荐答案
CursorAdapter 适配器对此更加可靠.您只需将 Cursor 传递给适配器,因此您无需维护任何集合.你必须遵循几件事
CursorAdapter adapter more reliable for this . you just pass your Cursor to adapter so you no need to maintain any collection . you must follow few things
适配器
public class YourCursorAdapter extends CursorAdapter {
public YourCursorAdapter(Context context, Cursor cursor, int flags) {
super(context, cursor, 0);
}
// The newView method is used to inflate a new view and return it,
// you don't bind any data to the view at this point.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.your_item_view, parent, false);
}
// The bindView method is used to bind all data to a given view
// such as setting the text on a TextView.
@Override
public void bindView(View view, Context context, Cursor c) {
// Find fields to populate in inflated template
TextView tvproduct = (TextView) view.findViewById(R.id.tcproduct);
TextView tvPrice = (TextView) view.findViewById(R.id.tvPrice);
TextView tvType = (TextView) view.findViewById(R.id.tvType);
// Extract properties from cursor
String row_PRODUCT = c.getString(c.getColumnIndex(KEY_PRODUCT));
String row_PRICE = c.getString(c.getColumnIndex(KEY_PRICE));
String row_TYPE = c.getString(c.getColumnIndex(KEY_TYPE));
// Populate fields with extracted properties
tvproduct.setText(row_PRODUCT);
tvPrice.setText(row_PRICE);
tvType.setText(row_TYPE);
}
}
从数据库中检索记录
公共游标 getAllRows() {String where = null;
public Cursor getAllRows() { String where = null;
// query the DBAdapter
Cursor cursor = db.query(true, TABLE_NAME, ALL_KEYS, where, null, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
}
return cursor;
}
现在将光标设置为您的适配器,适配器设置为列表视图
Now set cursor to your adapter ,adapter set to listview
ListView listView = (ListView) findViewById(R.id.new_list_listView);
Cursor cursor = newListDBAdapter.getAllRows();
YourCursorAdapter arrayAdapter = new YourCursorAdapter(this, cursor);
listView.setAdapter(arrayAdapter );
这篇关于使用 arrayList<String> 填充 ListView使用从游标获得的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!