私の問題を伝えるために、例を挙げて説明したいと思います
12個の配列があり、それらをList1からList12と呼び、それぞれのサイズが異なるとします。
3つのリストをそれぞれ1つの画面に表示したいので(4つの画面があります)、リスト項目のxmlと、ArrayAdapterを拡張する新しいアダプター(MyAdapter)を作成しました。また、ifステートメントを使用して1つの画面に表示する問題も解決しました。
しかし、これらの4つの画面のサイズは異なりArrayIndexOutOfBoundsException
、問題を制御しても、私が書いたようにリストには空の行があります
MyAdapter<String> adapter = new MyAdapter<String>(this,
android.R.layout.simple_list_item_1, R.id.MyListView,
List1)
4つのアダプターを次のように記述する必要がありますか?
MyAdapter<String> adapter1 = new MyAdapter<String>(this,
android.R.layout.simple_list_item_1, R.id.MyListView,
List1)
MyAdapter<String> adapter2 = new MyAdapter<String>(this,
android.R.layout.simple_list_item_1, R.id.MyListView,
List4)
MyAdapter<String> adapter3 = new MyAdapter<String>(this,
android.R.layout.simple_list_item_1, R.id.MyListView,
List7)
MyAdapter<String> adapter4 = new MyAdapter<String>(this,
android.R.layout.simple_list_item_1, R.id.MyListView,
List10)
または、より簡単な解決策はありますか?
助けてくれてありがとう!
Myadapterクラス:
public class MyAdapter<String> extends ArrayAdapter<String> {
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] listname) {
super(context, resource, textViewResourceId, listname);
}
public MyAdapter(MainActivity mainActivity, int simpleSpinnerItem,
String[] listlist) {
super(mainActivity, simpleSpinnerItem, listlist);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.list_item, parent, false);
TextView tv1 = (TextView) row.findViewById(R.id.textview1);
TextView tv2 = (TextView) row.findViewById(R.id.textview2);
TextView tv3 = (TextView) row.findViewById(R.id.textview3);
if (ListID == 1) {
tv1.setText(List1[position]);
if (position < List3.length) {
tv2.setText(List2[position]);
tv3.setText(List3[position]);
} else if (position < List2.length) {
tv2.setText(List4[position]);
}
} else if (ListID == 2) {
...
}
else
tv1.setText(list0[position]);
return row;
}
}
リストの長さList1>List2>List3
2つのコンストラクターは、画面間を移動するためのスピナーが画面上にあるからです。
ListIDはスピナーの位置です。
Padma Kumarのソリューションは、これを追加することで機能しました。そして、デフォルトのAdapter for Spinnerを使用しました。これにより、問題が解決します。
@Override
public int getCount() {
if (ListID == 1) {
return List1.length;
} else if (ListID == 2) {
return List4.length;
} else if (ListID == 3) {
return List7.length;
} else if (ListID == 4) {
return List10.length;
}
}