我是Android新手,我需要你的建议。我想要一个带有操作栏的活动,我还需要选项卡(但不是操作栏中的选项卡)和操作栏中的下拉列表进行导航。当我点击例如第一个选项卡,操作栏中的导航列表应填充数据,当秒选项卡,导航列表应填充其他数据等时,更改选项卡时也应更改操作项。当我从操作栏的导航列表中选择一些项目时,应该更新视图。我不知道该怎么做。
我使用ActionBarSherlock作为操作栏,我已经使用TabHost和TabWidget使用片段,当我点击选项卡,然后片段被更改,但这不是我想要的,我不知道该怎么做下一个。你能帮帮我吗?
这是一个屏幕:
当我单击选项卡1时,操作栏中的导航列表应为Tab1 List1,Tab1 List2等,并且应首次显示列表中的默认视图(例如,第一个Tab1 List1)或用户最后选择的从导航列表中查看。 当我点击标签2时,列表应该是Tab2 List1,Tab2 List2等,并且应该显示例如Tab2 List2视图。等等 因此,每个标签都会调整操作栏。
答案 0 :(得分:5)
您有两种选择:
TabWidget
。Spinner
小心不要让用户过载。通常两种类型的导航可能会令人困惑。
答案 1 :(得分:0)
对于动作项目,如果您正在为不同的"屏幕使用片段"然后他们可以注册以提供setHasOptionsMenu(true);
的操作项,并通过覆盖onCreateOptionsMenu(Menu menu, MenuInflater inflater)
来定义他们的操作。所以,一个好的设计规则,如果你不能简单地解释它,你可能做错了,应该改变设计。
也可能是滥用Android设计与动作栏模式分开太远,这意味着你有一些看起来像带导航的ActionBar,但实际上你还有其他一些你自己编造的东西。如果这是必需的,那么你不应该制作看起来像导航栏的动作栏,因为用户会期望某些行为并得到不同的反应(混乱)。
最后,根据您的描述,似乎选项卡驱动列表导航,但列表导航具有视觉优先级(位于上方且基本上包含选项卡)。因此,如果选项卡通过选择列表导航是一致的,但是列表根据选项卡导航的选择而更改,则通过使选项卡具有列表导航的视觉优先级来更清楚地表示它。所以,如果你保持两个导航,我会改变他们的顺序。也许尝试列表导航与视图寻呼机而不是列表导航。 Jake还有一个很棒的浏览器库http://viewpagerindicator.com/
答案 2 :(得分:0)
我是通过Setting the tab navigation in action bar
和Setting Spinner in Menu for navigation list
实现此目标的。我会解释第二部分,因为第一部分是微不足道的。
在Spinner
中定义action_bar.xml
:
<item
android:id="@+id/menu_test_spinner"
android:actionViewClass="android.widget.Spinner"
android:showAsAction="always"/>
在活动中Spinner
设置和绑定数据:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.action_bar, menu);
MenuItem testSpinner = menu.findItem( R.id.menu_test_spinner );
setupTestSpinner(testSpinner);
return true;
}
private void setupTestSpinner(MenuItem item) {
View view = item.getActionView();
if (view instanceof Spinner) {
Spinner spinner = (Spinner) view;
spinner.setAdapter(ArrayAdapter.createFromResource(this,
R.array.test,
android.R.layout.simple_spinner_dropdown_item));
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
//Do something on item selection
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
}
现在,覆盖响应标签更改的方法,并更改Spinner中的导航列表项。