行のセットでリストビューを行いました。各行にはチェックボックスがあります。1 つのチェックボックスをクリックすると、別のチェックボックスもチェックされます。これを避けるために私は何をしますか?誰でも私を助けて知っている..
2681 次
3 に答える
2
ListView の CheckBoxes に関する問題を回避するには、最初に false で初期化されたブール配列を取得し、ListView でチェックボックスがオンになっている配列内の対応する位置を true にします。これにより、アプリケーションで前後に移動したり、ListView をスクロールしたりするときに、チェックボックスのチェック状態で問題が発生することはありません。
チェックボックスの状態を設定する方法は次のとおりです。ブール配列です。
holder.checkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (((CheckBox) v).isChecked())
checkBoxState[pos] = true;
else
checkBoxState[pos] = false;
}
});
これにより、スクロール時にチェックボックスがチェックされたままになり、状態が自動的に変更されなくなります。
holder.checkbox.setChecked(checkBoxState[pos]);
于 2013-09-07T12:38:38.403 に答える
1
これは私のコードです:
public class Favourites extends Activity {
ListView list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listfavourites);
initcomponents();
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
}
});
ArrayList<HashMap<String, String>> alist = new ArrayList<HashMap<String, String>>();
for (int i = 1; i < 20; i++) {
HashMap<String, String> hmap = new HashMap<String, String>();
hmap.put("itemname", "ItemName" + i);
hmap.put("price", "Price");
alist.add(hmap);
}
final CustomListAdapter adapter = new CustomListAdapter(this,
R.layout.listitemfavourites, alist);
list.setAdapter(adapter);
}
private void initcomponents() {
list = (ListView) findViewById(R.id.listfavourites_lst_list);
}
class CustomListAdapter extends ArrayAdapter<HashMap<String, String>> {
Context context;
boolean[] checkBoxState;
int textViewResourceId;
ArrayList<HashMap<String, String>> alist;
public CustomListAdapter(Context context, int textViewResourceId,
ArrayList<HashMap<String, String>> alist) {
super(context, textViewResourceId);
this.context = context;
this.alist = alist;
this.textViewResourceId = textViewResourceId;
checkBoxState = new boolean[alist.size()];
}
public int getCount() {
return alist.size();
}
public View getView(final int pos, View convertView, ViewGroup parent) {
Holder holder = null;
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.listitemfavourites, parent,
false);
holder = new Holder();
holder.checkbox = (CheckBox) convertView
.findViewById(R.id.listitemfavourites_chk_checkbox);
holder.itemname = (TextView) convertView
.findViewById(R.id.listitemfavourites_txt_itemname);
holder.price = (TextView) convertView
.findViewById(R.id.listitemfavourites_txt_price);
holder.lin_background = (LinearLayout) convertView
.findViewById(R.id.favourites_lin_top);
convertView.setTag(holder);
holder = (Holder) convertView.getTag();
holder.itemname.setText(alist.get(pos).get("itemname"));
holder.price.setText(alist.get(pos).get("price"));
holder.checkbox.setChecked(checkBoxState[pos]);
if (pos == 0) {
holder.lin_background
.setBackgroundResource(R.drawable.bg_celltop);
} else if (pos == (alist.size() - 1) && alist.size() != 1) {
holder.lin_background
.setBackgroundResource(R.drawable.bg_cellbottom);
}
holder.checkbox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (((CheckBox) v).isChecked())
checkBoxState[pos] = true;
else
checkBoxState[pos] = false;
}
});
return convertView;
}
class Holder {
TextView itemname, price;
CheckBox checkbox;
LinearLayout lin_background;
}
}
}
于 2013-09-11T12:54:49.490 に答える
0
これは、条件 if(view==null) remove this によってビューをリサイクルしているためです。
于 2013-09-07T12:25:06.813 に答える