ListViewでgetViewに深刻な問題があります。問題は、各行にCheckBoxesがあることです。 ListViewはTabHostの一部であり、どのCheckBoxがチェックされているかを覚えておき、他のタブで使用する必要があります。ListViewのAdapterでの位置を見つける際の問題
しかし、リストビュー内のすべてのチェックボックスをチェックする「マスターチェックボックス」もあります。大したことはありませんが、問題は、CheckBoxのすべての状態を保持しているArrayListのCheckBoxの状態を変更するためにクリックした場所がわかりません。私がリスナーを各ビューに割り当てるたびに、引数としての "int position"は、私が必要とするものではなく、間違いなく数を与えます。アダプタの位置は、 "画面上の位置"ここで
は、コードは次のとおりです。すべての答えを
public View getView(int position, View convertView, ViewGroup parent) {
count = position;
View rowView = convertView;
SingleCarView sView = null;
if (rowView == null) {
LayoutInflater inflater = activity.getLayoutInflater();
rowView = inflater.inflate(R.layout.activity_overview_listview_row, null);
sView = new SingleCarView();
sView.cbx = (CheckBox)rowView.findViewById(R.id.overview_listview_chckbox);
sView.carName = (TextView)rowView.findViewById(R.id.overview_listview_label);
sView.state = (ImageView)rowView.findViewById(R.id.overview_listview_icon);
rowView.setTag(sView);
} else {
sView = (SingleCarView) rowView.getTag();
}
// THE TROUBLE BEGINS HERE...
sView.cbx.setChecked(savedState.get(position));
sView.cbx.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(computerActionWithCheckBox) {
// nothing
} else {
if(allCars.isChecked()) {
savedState.set(count, isChecked);
userModifiedCheckBox = true;
allCars.setChecked(false);
adapter.notifyDataSetChanged();
} else {
savedState.set(count, isChecked);
}
}
}
});
sView.carName.setText(objects.get(position));
switch(DataLoaderBeta.par.carState.get(position)){
case 1:
sView.state.setImageResource(R.drawable.ic_moving);
break;
case 2:
sView.state.setImageResource(R.drawable.ic_out_of_signal);
break;
case 0:
sView.state.setImageResource(R.drawable.ic_parked);
break;
}
return rowView;
}
おかげでたくさん! :-)あなたがgetView()
メソッドから取得する位置を表すあなたのCheckBox
のタグと整数として設定getView()
方法で
ブリリアント、Pの作品間違いなくどうもありがとうございました! – Michal