我有一个包含属于一个或多个类别的项目的ListView。我想通过单击操作栏中的图标来选择和取消选择这些类别。这样,listView将根据所选类别进行刷新。
以下是我发现的一个例子:
http://www.hostingpics.net/viewer.php?id=581753Screenshot20140110103007.png
目前,我找到了两个解决方案:
第二个解决方案完全符合用户界面的期望,但我认为spinner解决方案有多种选择。
答案 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
回调中调用此方法。还有两件事你需要注意:
mAnchor
是View
,您需要在右上角的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
图9. 操作栏中的下拉导航列表。
作为活动的另一种导航(或过滤)模式,操作栏提供内置下拉列表(也称为“微调器”)。例如,下拉列表可以提供不同的模式,通过这些模式对活动中的内容进行排序。
当更改内容很重要但不一定经常发生时,使用下拉列表很有用。如果更频繁地切换内容,则应使用navigation tabs代替。
启用下拉导航的基本步骤是:
actionBar.setListNavigationCallbacks(mSpinnerAdapter,mNavigationCallback);此方法会使用您的SpinnerAdapter和ActionBar.OnNavigationListener。
此过程相对较短,但实施SpinnerAdapter和ActionBar.OnNavigationListener是完成大部分工作的地方。您可以通过多种方式实现这些方法来定义下拉导航的功能,并且实现各种类型的SpinnerAdapter超出了本文档的范围(您应该参考SpinnerAdapter类参考了解更多信息信息)。但是,下面是SpinnerAdapter和ActionBar.OnNavigationListener让您入门的示例(点击标题以显示示例)。
答案 2 :(得分:0)
在RelativeLayout中包含ListView,然后设置View.GONE,直到用户按下您希望显示的按钮,这似乎是一种明智的方式。使用ListViewAdapter,您可以填充项目列表。
每个项目可以是水平方向的线性布局。
希望我的建议有所帮助! :)