对不起,如果这看起来很愚蠢,但我对这些东西都不熟悉。情况是我有很多数据存储在数据库中,我需要在列表视图中显示。第一个视图拉出15行,并且在db中只使用14列中的两列。我使用此适配器在列表视图中显示它:
private class CustomListAdapter extends SimpleCursorAdapter {
private Cursor cursor;
public CustomListAdapter(Context context, int textViewResourceId, Cursor cursor, String from[], int to[]) {
super(context, textViewResourceId, cursor, from, to);
this.cursor = cursor;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
cursor.moveToPosition(position);
if (cursor != null) {
TextView lt = (TextView) v.findViewById(R.id.lefttext);
TextView rt = (TextView) v.findViewById(R.id.righttext);
if (lt != null) {
lt.setText(/*cursor.getString(cursor.getColumnIndex(EwstableContentProvider.TIMESTAMP))*/cursor.getString(cursor.getColumnIndex(EwstableContentProvider._ID))); }
if (rt != null){
rt.setText(cursor.getString(cursor.getColumnIndex(EwstableContentProvider.TOTALEWS)));
}
}
return v;
}
}
}
这甚至可能是愚蠢的,但至少它是有效的。 现在,在下一个活动中,我需要显示所有列中的数据,但只显示用户在上一个活动中选择的行。我正在把它放在列表视图中,就像http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/中的列表视图一样,这也是我修改适配器的地方。 这样,我会将数据库中两个字段的数据放入列表视图中的每个项目中。这是完美的,它将是一个数据点和评论。 问题是,此时我在游标中只有一行,所以@Override之后的位只执行一次,所以我得到一个,而不是列表视图中的7个项。 我真的很感激任何帮助,即使是以完全不同的方式做到这一点。
答案 0 :(得分:1)
假设您知道列数,可以使用for循环遍历所有列,将每个字符串存储到String数组中。
String[] arr = new String[cursor.getColumnCount()];
for(int i=0; i < cursor.getColumnCount(); i++)
arr[i] = cursor.getString(i);
然后使用带有ArrayAdapter的String []作为列表视图。
答案 1 :(得分:0)
更新:抱歉没有仔细阅读这个问题;见其他答案。
您需要使用游标适配器。我推荐SimpleCursorAdapter(下面的示例)。
您还需要将“from”参数更改为要显示的文本的列名(键)。我个人代码的一个例子如下。这一行,
new String[] { DBAdapter.KEY_NAME },
是重要的一个。它在DBAdapter中定义为:
public static final String KEY_NAME = "name";
与我自己数据库中第一列的名称相匹配。
DBAdapter dba = new DBAdapter(this);
dba.open();
Cursor c = dba.list_listMode();
SimpleCursorAdapter ca = new SimpleCursorAdapter(
this,
R.layout.list_item,
c,
new String[] { DBAdapter.KEY_NAME },
new int[] { R.id.list_item_text });
lv.setTextFilterEnabled(true);
lv.setAdapter(ca);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id_long) {