【问题标题】:Android ActionBar/ActionBarSherlock multiple choices spinnerAndroid ActionBar/ActionBarSherlock 多选微调器
【发布时间】:2014-01-10 09:42:32
【问题描述】:

我有一个 ListView 包含属于一个或多个类别的项目。我想通过单击操作栏中的图标来选择和取消选择这些类别。这样,listView 会根据选择的类别进行刷新。

这是我找到的一个例子:

http://www.hostingpics.net/viewer.php?id=581753Screenshot20140110103007.png

目前,我找到了 2 个解决方案:

  • 添加带有可检查项目的微调器,但它会在每次关闭菜单时关闭 选择/取消选择
  • 在 RelativeLayout 中创建一个带有可检查项的 ListView 并制作 点击图标时会出现。

第二个解决方案完全符合 UI 预期,但我认为有一种多选微调器解决方案。

【问题讨论】:

标签: android listview checkbox actionbarsherlock spinner


【解决方案1】:

Spinner 使用ListPopupWindow 显示下拉菜单,您可以使用它来显示多选项目选择列表:

private void showPopup() {
    final ListPopupWindow lpw = new ListPopupWindow(this);
    lpw.setAdapter(/*Your adapter here*/);
    lpw.setAnchorView(mAnchor); // see below
    lpw.setContentWidth(/*specific value*/); // see below
    lpw.show();
    // this is required because the popup's `ListView` will not be available 
    // until the ListPopupWindow is actually shown.
    mAnchor.post(new Runnable() {
        @Override
        public void run() {
            lpw.getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
        }
    });
}

然后您可以从MenuItem选择onOptionsItemSelected() 987654324 MenuItem。您还需要注意另外两件事:

mAnchor 是一个View,您需要将其插入到右上角的Activity 布局中,以便ListPopupWindow 将显示在正确的位置。例如,如果您有 Activity 根:

RelativeLayout 然后mAnchor 将是:

mAnchor = new View(this);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(0, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
mAnchor.setLayoutParams(rlp);
// add mAnchorView first to the RelativeLayout

LinearLayout 然后mAnchor 将是:

mAnchor = new View(this);
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(0, 0);
llp.gravity = Gravity.RIGHT;
mAnchor.setLayoutParams(llp);
// add mAnchorView first to the LinearLayout(assuming orientation vertical)

其他类型的布局以此类推。

其次,您需要将ListPopupWindow 的宽度设置为所需的值。您需要针对不同的屏幕尺寸和方向(如手机纵向和手机横向,纵向和横向的不同表格尺寸)调整此值。

【讨论】:

    【解决方案2】:

    原始指南可在 http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown

    添加下拉导航


    图 9. 操作栏中的下拉导航列表。

    作为您活动的另一种导航(或过滤)模式,操作栏提供了一个内置下拉列表(也称为“微调器”)。例如,下拉列表可以提供对 Activity 中的内容进行排序的不同模式。

    当更改内容很重要但不一定经常发生时,使用下拉列表很有用。如果切换内容的频率更高,您应该改用navigation tabs

    启用下拉导航的基本过程是:

    1. 创建一个SpinnerAdapter,提供下拉列表的可选项目列表以及绘制列表中每个项目时使用的布局。
    2. 实现ActionBar.OnNavigationListener 以定义用户从列表中选择项目时发生的行为。
    3. 在活动的onCreate() 方法期间,通过调用setNavigationMode(NAVIGATION_MODE_LIST) 启用操作栏的下拉列表。
    4. 使用 [setListNavigationCallbacks()](http://developer.android.com/reference/android/support/v7/app/ActionBar.html#setListNavigationCallbacks(android.widget.SpinnerAdapter, android.support.v7.app.ActionBar.OnNavigationListener)) 为下拉列表设置回调。例如:

    actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);这个方法接受你的SpinnerAdapterActionBar.OnNavigationListener

    此过程相对较短,但实现SpinnerAdapterActionBar.OnNavigationListener 是完成大部分工作的地方。有很多方法可以实现这些来定义下拉导航的功能,实现各种类型的SpinnerAdapter 超出了本文档的范围(您应该参考SpinnerAdapter 类参考以获取更多信息)。不过,下面是 SpinnerAdapterActionBar.OnNavigationListener 的示例,可帮助您入门(点击标题以显示示例)。

    【讨论】:

      【解决方案3】:

      在 RelativeLayout 中包含 ListView,然后设置 View.GONE 直到用户按下您希望显示的按钮,这似乎是一种明智的做法。使用 ListViewAdapter 您可以填充项目列表。

      每个项目都可以是水平方向的线性布局。

      希望我的建议有所帮助! :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        相关资源
        最近更新 更多