0

削除する複数のアイテムを選択するためのListViewカスタム レイアウトがありますが、常に 0 を返します。CheckBoxlist.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)); 
        }    
    }          
}
4

2 に答える 2

1

選択したアイテムをリストビューにも認識させるように設定する必要があります。これを使ってみてください- listView.setItemChecked(position,true);

于 2013-07-16T10:11:02.670 に答える
0

使用する:

SparseBooleanArray arraySparse = myGridView.getcheckeditempositions();

for(int i=0;i<arraySparse.size();i++){
//Shows values boolean of keys 
     Log.d("MI_APP",""+arraySparce.valueAt(i));
//Shows keys id or position of your element in the GridView
     Log.d("MI_APP",""+arraySparce.keyAt(i));
}

よろしく!

于 2013-11-12T06:30:28.417 に答える