0

对不起,如果这看起来很愚蠢,但我对所有这些东西都很陌生。情况是我有很多数据存储在数据库中,我需要在列表视图中呈现。第一个视图提取 15 行,并且仅使用数据库中 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 个项目。我真的很感激任何帮助,即使是以完全不同的方式来做。

4

2 回答 2

1

假设您知道列数,您是否可以只使用 for 循环遍历所有列,将每个字符串存储到 String 数组中。

String[] arr = new String[cursor.getColumnCount()];
for(int i=0; i < cursor.getColumnCount(); i++)
    arr[i] = cursor.getString(i);

然后将 String[] 与ArrayAdapter一起用于您的列表视图。

于 2012-06-05T22:25:49.573 回答
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) {
于 2012-06-05T22:11:51.513 回答