Android ActionBar/ActionBarSherlock多选下拉列表框

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

581753Screenshot20140110103007.png http://www.hostingpics.net/viewer.php?id=581753Screenshot20140110103007.png 目前,我找到了两种解决方案:
1. 添加一个带有可选项的下拉列表,但每次选择/取消选择时都会关闭菜单。 2. 创建一个RelativeLayout中带有可选项的ListView,并在单击图标时显示它。
第二个解决方案完全符合UI期望,但我认为还有一种多选下拉列表的解决方案。

也许这篇文章能帮到你: https://dev59.com/ym445IYBdhLWcg3wJ258?answertab=votes#tab-top - zed13
我认为它不适合操作栏。 - 1MAGIN
3个回答

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

您可以在选中正确的MenuItem时,从onOptionsItemSelected()回调中调用此方法。您需要注意两件事情: 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的宽度为所需值。您需要根据不同的屏幕大小和方向(如手机纵向和横向,纵向和横向的不同表格尺寸)来适应此值。


1

原始指南可在以下链接中查看:http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown

添加下拉式导航


Image

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

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

当更改内容很重要但不一定经常发生时,使用下拉列表是有用的。在更频繁地切换内容的情况下,应该使用导航选项卡

启用下拉导航的基本步骤如下:

  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的示例,可供您开始使用(单击标题以显示示例)。


0
将ListView包含在RelativeLayout中,然后设置View.GONE直到用户按下要显示的按钮似乎是一个明智的做法。使用ListViewAdapter可以填充项目列表。
每个项目可以是水平方向的线性布局。
希望我的建议有所帮助! :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接