簡體   English   中英

刪除ListVIew中的多行

[英]Delete multiple rows in a ListVIew

我有一個Lsitview填充CheckedTextViews。 我的目標是,如果可能,可以使用MultiChoiceModeListener刪除多個行。 要使用它,我必須設置ListView CHOICE_MODE_MULTIPLE_MODAL

現在的首要問題是:我現在不能立即勾選復選框,因為列表視圖不再是ChOICE_MODE_MULTIPLE

OnItemClickListener將它設置為CHOICE MODE MULTIPLE ,然后為ListView設置一個OnItemClickListener ,但是即使我只想在我的應用程序中選中一個復選框,也總是調用ChoiceModeMultiple及其方法onItemStateChaed方法。

關於如何解決該問題的任何解決方案?

代碼(布局為ListVIew):

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");
        }

    }

}

試試這個例子,請參考並解決

  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);
            }
        });
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM