3

リストビューの 2 次元文字列配列からコンテンツ (ほとんどの場合、1 つのインデックスのみ) を表示する必要があります。

次のような 1 次元配列の arrayadapter を作成できます。

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 の 2 次元配列の最初または 2 番目のインデックス?

詳細に:

2 次元配列の内容:

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

f.exを表示したいのですが。リストのインデックス[i][2]。

各配列のすべてのインデックスを表示する必要は必ずしもありませんが、それらにアクセスできる必要があります。各配列には ID などの複数のエントリが含まれているため、表示したい情報を 1 次元配列に変換するだけでは、各配列の ID が失われてしまいます。

4

4 に答える 4

3

次の 2 つのソリューションから選択できます。

  1. 独自の変換ロジックを使用して、2D 配列を単純な配列に変換するメソッドを作成します。
  2. クラスを拡張しBaseAdapterて独自の実装を作成します。2D 配列を基になるデータとして使用し、その内容を希望する方法で表示できます。

お役に立てれば。

于 2012-09-04T07:48:31.180 に答える
2

2D 配列を作成する代わりに、ニーズに合った特定のモデルを作成することをお勧めします。この場合:

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 に答える