2017-08-04 5 views
0

CheckedTextViewsでLsitviewが設定されています。私の目標は、できるだけMultiChoiceModeListenerで複数の行を1行で削除できるようにすることです。 これを使用するには、ListView CHOICE_MODE_MULTIPLE_MODALを設定する必要があります。ListVIewで複数の行を削除する

今すぐ問題が発生しました。リストビューはもうChOICE_MODE_MULTIPLEなので、今すぐチェックボックスをクリックすることはできません。

私はCHOICE MODE MULTIPLEそれを設定して、ちょうどListViewコントロールのためのOnItemClickListenerを設定するidearをhadeが、その後ChoiceModeMultipleとその方法onItemStateChaedメソッドは、常に私はちょうどたい私のアプリのチェックボックスをチェックしても、呼び出されます。

これを修正する方法はありますか?

コード(レイアウトは、リストビューです):

layout.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
    @Override 
    public void onItemCheckedStateChanged(android.view.ActionMode actionMode, int i, long l, boolean b) { 

     if (!list_items.contains(list.get(i))) { 
      count++; 
      list_items.add(list.get(i)); 
      actionMode.setTitle(count + " items selected"); 
     } else if (list_items.contains(list.get(i))) { 
      count--; 
      list_items.remove(list.get(i)); 
      actionMode.setTitle(count + " items selected"); 
     } 

    } 

} 
+0

を解決してください。この例を試してみてくださいあなたがチェックのために 'onItemClickListener'を適用することができますし、'は、複数の行を選択するにはonItemLongClickListener'? – deHaar

+0

私は試しましたが、悲しいことにアプリがクラッシュしました – Sarius

+0

どのようなクラッシュですか?例外がありましたか?あなたのログは何を言ったのですか? – deHaar

答えて

1

、これを参照し、

public class MainActivity extends AppCompatActivity { 

    ListView list; 
    ArrayAdapter<String> arrayAdapter; 
    ArrayList<String> arrayList = new ArrayList<>(); 
    ArrayList<String> arrayList2 = new ArrayList<>(); 
    int count = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     list = (ListView)findViewById(R.id.listItems); 
     arrayList.add("one"); 
     arrayList.add("two"); 
     arrayList.add("three"); 
     arrayList.add("four"); 
     arrayList.add("five"); 
     arrayAdapter = new ArrayAdapter<String>(this,R.layout.list_layout,R.id.textView,arrayList); 
     list.setAdapter(arrayAdapter); 

     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 


     list.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { 
      @Override 
      public void onItemCheckedStateChanged(ActionMode actionMode, int position, long l, boolean b) { 

       count = count+1; 
       actionMode.setTitle(count + " items selected"); 
       arrayList2.add(arrayList.get(position)); 

      } 

      @Override 
      public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { 
       MenuInflater inflater = actionMode.getMenuInflater(); 
       inflater.inflate(R.menu.list_menu,menu); 

       return true; 
      } 

      @Override 
      public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { 
       return false; 
      } 

      @Override 
      public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { 

       switch (menuItem.getItemId()) 
       { 

        case R.id.delete_id: 

         for(String msg : arrayList2) { 
          arrayAdapter.remove(msg); 

         } 
          Toast.makeText(getApplicationContext(),"deleted",Toast.LENGTH_SHORT).show(); 
          count=0; 
          actionMode.finish(); 
         return true; 


        default: 
         Toast.makeText(getApplicationContext(),"Nothing selected",Toast.LENGTH_SHORT).show(); 
         break; 
       } 

       return false; 
      } 

      @Override 
      public void onDestroyActionMode(ActionMode actionMode) { 

      } 
     }); 

     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

       adapterView.setSelected(true); 
      } 
     }); 
    } 


}