【问题标题】:multiple selection listview with custom layout具有自定义布局的多选列表视图
【发布时间】:2015-08-12 03:24:44
【问题描述】:

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

  <Imageview>
  <Textview>

我是否必须在 onItemClick 或任何方法中进行管理 der ?小sn-p会帮忙

【问题讨论】:

标签: android listview android-custom-view


【解决方案1】:

为此,您需要ListView.CHOICE_MODE_MULTIPLE_MODAL。见以下代码sn -p,

首先创建一个 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>

【讨论】:

  • setMultiChoiceModeListener is api 11+
【解决方案2】:

我认为您希望在长按侦听器上使用 whatsup select 之类的东西,您可以更改自定义列表视图项(行)的颜色

【讨论】:

  • 他说的是多列表行选择。长按只能高亮一行而不是多行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多