具有操作栏和选项卡的Android布局

4
我是Android的新手,需要你的建议。我想要一个带有操作栏的活动界面,同时需要选项卡(但不是在操作栏中)和下拉列表在操作栏中导航。当我点击第一个选项卡时,操作栏中的导航列表应该填充数据,当我点击第二个选项卡时,导航列表应该填充另一个数据,以此类推,当选项卡更改时,操作项也应更改。当我从操作栏中的导航列表中选择某个项目时,视图应该更新。我不确定如何实现它。
我使用ActionBarSherlock来创建操作栏,并且已经使用TabHost和TabWidget与片段创建了选项卡,但这并不完全符合我的需求,我不知道接下来该怎么做。你能帮帮我吗?
以下是屏幕截图:
当我点击选项卡1时,操作栏中的导航列表应该是Tab1 List1、Tab1 List2等,并且应该显示默认视图或用户上次选择的视图(例如第一个Tab1 List1)。当我点击选项卡2时,列表应该是Tab2 List1、Tab2 List2等,并且应该显示例如Tab2 List2视图等。因此,每个选项卡都会调整操作栏。

1
一些你所需的图片会非常有帮助。你可以在画图或其他软件中绘制它们,然后将它们作为图片发布在你的原始帖子中。 - prolink007
3个回答

5
你有两个选择:
  1. 在操作栏中使用列表导航,并在内容视图的顶部放置一个 TabWidget
  2. 在操作栏中使用选项卡导航,并设置带有 Spinner 的自定义视图。
注意不要给用户造成负担。通常,两种类型的导航可能会令人困惑。

谢谢Jake,但我不确定这是否正是我想要的。我知道这很复杂,但我想要像三个分离的电子邮件应用程序那样的东西。另外,当我单击第一个选项卡时,我有一个类似电子邮件应用程序布局的选项卡,当我单击第二个选项卡时,就是第二个选项卡等等。我不确定我是否解释清楚了。 - Bartosz Bialecki
@Jake,你能帮忙看一下这个问题吗?:http://stackoverflow.com/questions/20629665/strange-behaviour-of-actionbar-sherlock-searchview-above-api-level-11-after-call http://stackoverflow.com/questions/20606647/progress-dialog-not-aligned-in-the-actionbarsherlock-after-api-level-11 - AndroidLearner

0
对于操作项,如果你在不同的“屏幕”上使用片段,则可以使用setHasOptionsMenu(true);注册以提供操作项,并通过重写onCreateOptionsMenu(Menu menu, MenuInflater inflater)来定义它们的操作。因此,一个好的设计规则是,如果你无法简单地解释它,那么你可能做错了什么,应该改变设计。
同时,过度偏离操作栏模式可能是对Android设计的滥用,这意味着你有一个看起来像具有导航功能的ActionBar,但实际上你自己创造了一些其他的东西。如果需要这样做,那么你不应该创建一个看起来像具有导航功能的操作栏,因为用户会期望某些行为并得到不同的响应(混淆)。

最后,根据您的描述,似乎选项卡驱动列表导航,但是列表导航具有视觉优先权(位于选项卡上方并基本包含选项卡)。因此,如果选项卡在列表导航的选择中保持一致,但列表根据选项卡导航的选择而更改,则通过使选项卡在列表导航上具有视觉优先权来更清晰地表示。因此,如果您保留两个导航,我会颠倒它们的顺序。也许可以尝试使用视图分页器而不是列表导航。Jake也有一个很棒的视图分页器库http://viewpagerindicator.com/


0
我是通过在操作栏中设置选项卡导航和在菜单中设置下拉列表导航来实现的。因为第一部分很平凡,所以我只解释第二部分。
在action_bar.xml文件中定义Spinner:
<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中更改导航列表项。

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