3

我需要在列表视图中显示二维字符串数组的内容(很可能只是一个索引)。

我可以为一维数组创建一个数组适配器,如下所示:

String[] values ... blah-blah

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  
    android.R.layout.simple_list_item_1, android.R.id.text1, values);

listView.setAdapter(adapter); 

这只是花花公子。但是,如果我这样做:

String[][] values ... blah-blah

ArrayAdapter<String[]> adapter = new ArrayAdapter<String[]>(this,  
    android.R.layout.simple_list_item_1, android.R.id.text1, values);

listView.setAdapter(adapter);

这自然会显示数组中的数组,可以说,而不是内容。

问题是,我如何显示 f.ex。ListView 中二维数组的第一个或第二个索引?

详细地:

二维数组内容:

3,03-09-2012,text,moretext
2,03-09-2012,text,moretext
1,03-09-2012,text,moretext

我想显示 f.ex。列表中的索引[i][2]。

我不一定需要显示每个数组的所有索引,但我需要访问它们。由于每个数组都包含多个条目,其中包括一个 ID,因此我不能只将要显示的信息转换为一维数组,因为这样我就会丢失每个数组的 ID。

4

4 回答 4

3

有两种解决方案供您选择:

  1. 使用您自己的转换逻辑创建一个将二维数组转换为简单数组的方法。
  2. 扩展BaseAdapter该类以创建您自己的实现,您可以将二维数组作为基础数据并以您想要的方式显示其内容。

希望这可以帮助。

于 2012-09-04T07:48:31.180 回答
2

我建议,不要创建二维数组,而是创建一个适合您需求的模型。在这种情况下:

class Model {
    private String mText1;
    private String mText2;

   //getters and setters

}

并创建一个自定义ArrayAdapter(一个扩展的类ArrayAdapter<Model>)。

这样,只需ListView稍作修改,就可以更轻松地向您添加额外的信息;例如添加图像。

查看本教程以获取详细说明。

于 2012-09-04T07:58:33.547 回答
1

创建一个模型,就像上面提到的 Benito 一样,作为一个内部类总是很有效。
存储任意数量项目的好方法。

public class ActivityClass extends Activity {
    ...
    ArrayList<ValuesModel> listViewValues = new ArrayList<ValuesModel>();
    listViewValues.add(new ValuesModel("row title", "row details"));

    ListViewAdapter listAdapter = new ListViewAdapter(this, listViewValues);
    ((ListView) findViewById(android.R.id.list)).setAdapter(listAdapter);
    ...

    public class ValuesModel {
        private String rowTitle;
        private String rowDetails;

        public ValuesModel(String rowTitle, String rowDetails) {
            this.rowTitle = rowTitle;
            this.rowDetails = rowDetails;
        }
        public String getRowTitle() {
            return rowTitle;
        }
        public String getRowDetails() {
            return rowDetails();
        }
}

然后在你的列表适配器里面,

public class ListViewAdapter extends ArrayAdapter<ActivityClass.ValuesModel> {
    private ArrayList<ActivityClass.ValuesModel> mValues;
    ...

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ...
        //here whenever you need to retrieve your values, just say:  
        //  mValues.get(position).getRowTitle();
        //  mValues.get(position).getRowDetails();
        //if you use a viewholder pattern, you can do this:
        viewHolder.rowTitle = (TextView) convertView.findViewById(R.id.row_title_textview);  
        viewHolder.rowTitle.setText(mValues.get(position).getRowTitle());
        ...
    }
}
于 2013-07-03T17:03:56.483 回答
0

您可以简单地扩展 ArrayAdapter。您只需要重写 getView() 以绑定元素 [2]。可能是这样的:

public class MyArrayAdapter extends ArrayAdapter<String[]> {
    public View getView(int position, View convertView, ViewGroup parent) {
        ((TextView) super.getView()).setText(getItem()[2]);
    }
}
于 2012-09-04T07:58:52.083 回答