Android ActionBar / ActionBarSherlock多个选择微调器

时间:2014-01-10 09:42:33

标签: android listview checkbox actionbarsherlock spinner

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

以下是我发现的一个例子:

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

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

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

第二个解决方案完全符合用户界面的期望,但我认为spinner解决方案有多种选择。

3 个答案:

答案 0 :(得分:2)

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

然后,当选择了右onOptionsItemSelected()时,您可以从MenuItem回调中调用此方法。还有两件事你需要注意:

mAnchorView,您需要在右上角的Activity布局中插入,以便ListPopupWindow显示在正确的位置。例如,如果您拥有Activity root:

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的宽度设置为所需的值。您需要根据不同的屏幕尺寸和方向调整此值(如电话纵向和手机横向,纵向和横向不同的桌面尺寸)。

答案 1 :(得分:1)

  

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

添加下拉导航


Image

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

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

当更改内容很重要但不一定经常发生时,使用下拉列表很有用。如果更频繁地切换内容,则应使用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)设置下拉列表的回调。例如:
  5. actionBar.setListNavigationCallbacks(mSpinnerAdapter,mNavigationCallback);此方法会使用您的SpinnerAdapterActionBar.OnNavigationListener

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

答案 2 :(得分:0)

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

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

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