具有自定义布局的多选列表视图

时间:2015-08-12 03:24:44

标签: android listview android-custom-view

我想要有多个选择的自定义ListView布局,所以我正在做自定义适配器,但我如何允许用户选择多个。在默认的ListView中,我们给出了选择模式,但我希望布局不同而不是支票簿

  <Imageview>
  <Textview>

我是否必须在onItemClick中管理或任何方法是der?小片段有助于enter image description here

2 个答案:

答案 0 :(得分:2)

为此你需要ListView.CHOICE_MODE_MULTIPLE_MODAL。请参阅以下代码段

首先创建一个ListView及其适配器,

        listView = (ListView) findViewById(R.id.listView);
        adapter = new AttendanceListAdapter(this, attendanceList);

将列表选择模式设置为多个并添加多选项侦听器

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        listView.setMultiChoiceModeListener(new ModeCallback());
        listView.setAdapter(adapter);

您的多选听众应该看起来像这样,

private class ModeCallback implements ListView.MultiChoiceModeListener {

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.list_select_menu, menu);
            mode.setTitle("Select Items");
            return true;
        }

        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return true;
        }

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            switch (item.getItemId()) {
                case R.id.share:
                    Toast.makeText(AddAttendanceActivity.this, "Shared " + listView.getCheckedItemCount() +
                            " items", Toast.LENGTH_SHORT).show();
                    mode.finish();
                    break;
                default:
                    Toast.makeText(AddAttendanceActivity.this, "Clicked " + item.getTitle(),
                            Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }

        public void onDestroyActionMode(ActionMode mode) {
        }

        public void onItemCheckedStateChanged(ActionMode mode,
                                              int position, long id, boolean checked) {
            final int checkedCount = listView.getCheckedItemCount();
            switch (checkedCount) {
                case 0:
                    mode.setSubtitle(null);
                    break;
                case 1:
                    mode.setSubtitle("One item selected");
                    break;
                default:
                    mode.setSubtitle("" + checkedCount + " items selected");
                    break;
            }
        }

    }

现在,如果您希望突出显示所选行,请将此样式添加到列表项布局的根元素中。

  <style name="activated" parent="AppTheme">
        <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
    </style>

答案 1 :(得分:0)

我认为你想要在长按一下监听器上选择whatsup这样的东西你可以改变自定义列表视图项(行)的颜色