(フレームワーク)と各画像のチェックボックスを使用してListView
ロードする画像がありました。これ用ImageLoader
に拡張するアダプターがありました。チェックボックスの1つをチェックしてスクロールすると、自動的にチェックされる他のチェックボックスが表示されます. 私の問題を解決する方法はありますか。誰か手がかりや例を教えてください。BaseAdapter
ListView
3 に答える
1
リスト内のすべての位置についてチェック状態を維持するブール値の配列を使用することをお勧めします。ListViewはスクロール時にリスト要素を再作成するため、チェックが混乱する可能性があります。これは、インスタンス化する要素の位置のブール値がtrueであるかどうかを確認してから、checkBox.setChecked(true)またはcheckBox.setChecked(false)を使用する必要があることを意味します。
于 2012-10-04T12:43:18.197 に答える
1
これは、行が再利用されているためです。そのため、行がチェックされているかどうかを示す属性を各行に設定する必要があります。そして、getView()
その行がチェックされているかどうかを確認するために「if and else」ステートメントを作成し、それが単にチェックされている場合は、チェックされていないままにします。
于 2012-10-04T12:10:30.403 に答える
0
単純、
Set<String> bs = new HashSet(String);
String[] bid;
そして、これをgetViewメソッドに記述し、テンプレートとして使用します。解決策としてではありません
public View getView(final int position, View convertView, ViewGroup arg2) {
row = convertView;
if (row == null)
{
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = vi.inflate(R.layout.your_listview,null);
}
check = (CheckBox) row.findViewById(R.id.your_checkboxid);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
bs.add(bid[position]);
}
else
{
if(bs.contains(bid[position]))
{
bs.remove(bid[position]);
}
}
}
});
if(bs.contains(bid[position]))
{
check.setChecked(true);
}
else
{
check.setChecked(false);
}
return row;
}
于 2012-10-04T13:06:01.433 に答える