从游标中的多个列填充列表视图,但只有一行?

时间:2012-06-05 21:21:23

标签: android

对不起,如果这看起来很愚蠢,但我对这些东西都不熟悉。情况是我有很多数据存储在数据库中,我需要在列表视图中显示。第一个视图拉出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个项。 我真的很感激任何帮助,即使是以完全不同的方式做到这一点。

2 个答案:

答案 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) {