削除する複数のアイテムを選択するためのListView
カスタム レイアウトがありますが、常に 0 を返します。CheckBox
list.getCheckedItemPositions()
何が欠けているのかわかりません。CheckBox
ユーザーが aを true にチェックしてgetCheckedItemPositions
それらを返すときに、チェック済みアイテムのリストを作成するにはどうすればよいですか?
リストビュー
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/footer"
android:choiceMode="multipleChoice"
android:clickable="true"
android:layout_below="@+id/adViewHolder" />
行
<LinearLayout
android:id="@+id/recording_play_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dip"
android:orientation="vertical" >
<ImageView
android:id="@+id/recording_play_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@drawable/play" />
<CheckBox
android:id="@+id/multi_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:focusable="false"
android:focusableInTouchMode="false" />
</LinearLayout>
アダプタ
public RecordingsAdapter(Context context, ListActivity a, ArrayList<MyObject> items) {
mContext = context;
mItems = items;
mActivity = a;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
checkBoxState=new boolean[items.size()];
}
..................
................
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
if(convertView==null) {
vi = inflater.inflate(R.layout.recording_list_item, null);
}
final CheckBox multi_checkBox = (CheckBox) vi.findViewById (R.id.multi_checkBox);
multi_checkBox.setChecked(checkBoxState[position]);
multi_checkBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(((CheckBox)v).isChecked()) {
checkBoxState[position]=true;
v.setSelected(true);
} else{
checkBoxState[position]=false;
v.setSelected(false);
}
}
});
return vi;
}
アクティビティ
SparseBooleanArray checkedItemPositions = list.getCheckedItemPositions();
Log.i("recorded_file_delete list.getCheckedItemPositions()", String.valueOf(list.getCheckedItemPositions().size()));
int itemCount = list.getCount();
Log.i("recorded_file_delete", String.valueOf(itemCount));
for(int i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
boolean deleted = f.delete();
if(deleted) {
Asr.recordingsCache.removeRecordingFile(f);
Log.i("recorded_file_delete", String.valueOf(deleted));
}
}
}