标签导航的最佳做法?

时间:2012-10-23 19:51:11

标签: android android-fragments android-actionbar

我正在寻找使用sherlock操作栏的标签导航的最佳做法。 更改片段的正确方法是什么,并在选择另一个选项卡时将片段添加到Backstack并清除后栈。

是否有任何好的示例或开源项目显示如何正确执行?

4 个答案:

答案 0 :(得分:6)

我不会直接使用ABS来做到这一点。一旦您的标签需要片段切换等,您将遇到麻烦。我认为正确的方法是使用与ABS兼容的ViewPagerIndicator。作为奖励,您还可以在标签之间左右滑动。 你需要compat包(比如ABS),你可以在中找到示例用法 samples folder

答案 1 :(得分:6)

正如埃德加所说,android navigation guide是一个很好的起点。但是,让我添加一些评论标签如何与Android一起使用。

新的acitonbar标签应该与Google Play应用中的相同方式实现。这意味着只要您想要选项卡中的某些内容的某些细节,您就会转到新的视图/片段/活动,并且标签将会消失。

所以android的标签不应该一直可见,而只能在顶层。如果您希望简化用户的导航,您将实现向上按钮,以便用户可以快速返回到顶部层次结构,其中选项卡可见。

教程和样本

我个人最喜欢的示例和教程是googles网页上操作栏教程下的tabs tutorial

选项卡导航的示例也可以在android-sdk附带的示例项目中找到。转到:android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app 并查找:FragmentTabs.javaFragmentTabsPager.java

如果你想使用ActionBarSherlock,你也可以download ActionBarSherlock查看/ samples目录中的samples文件夹。在那里,您有TabNavigation.javaTabNavigationCollapsed.java中的标签转发。虽然我认为你应该给动作栏教程一个镜头。

带有后筹码的标签

还可以说你想要一个始终可见的标签栏(虽然不推荐)。然后,您必须为每个选项卡创建自定义后台堆栈。您可以查看here以获取如何实现该选项的示例。

地图和标签

查看使用Map的所有Googles应用。 Google使用溢出操作栏按钮来浏览。因此,如果有人希望这样做,那么我们应该作为开发人员使用带有地图的Google mapsv2变得更加容易。

答案 2 :(得分:1)

我已经多次使用片段和标签完成了ActionbarSherlock,并且它的工作非常精彩。

你需要一个TabListener:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.android.wifilogger.R;

public class WifiTabListener implements ActionBar.TabListener {
        public Fragment fragment;
        public MainTabActivity act;

        public WifiTabListener(Fragment fragment, MainTabActivity act) {
        this.fragment = fragment;
        this.act = act;
        }


        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            ft.replace(R.id.root, fragment);
        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            ft.remove(fragment);
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
        }
}

并设置TabActivity:

public class MainTabActivity extends SherlockFragmentActivity {

public ActionBar actionBar;
private ActionBar.Tab listTab;
public MenuItem refreshItem;
private SherlockFragment listFragment;
private SherlockFragment mapFragment;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // getActionBar().setDisplayHomeAsUpEnabled(true);


    actionBar = getSupportActionBar();

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    setContentView(R.layout.main);

    ActionBar.Tab settingsTab = actionBar.newTab().setText("Settings")
            .setTag("settings");
    listTab = actionBar.newTab().setText("Wifi List")
            .setTag("list");
    ActionBar.Tab mapTab = actionBar.newTab().setText("Map").setTag("map");

    SherlockFragment settingsFragment = new SettingsFragment();
    listFragment = new WifiListFragment();
    mapFragment = new WifiMapFragment();

    settingsTab.setTabListener(new WifiTabListener(settingsFragment, this));
    listTab.setTabListener(new WifiTabListener(listFragment, this));
    mapTab.setTabListener(new WifiTabListener(mapFragment, this));

    actionBar.addTab(listTab,false);
    actionBar.addTab(mapTab,false);
    actionBar.addTab(settingsTab,false);
    actionBar.selectTab(listTab);

}

您必须将SettingsFragment,MapFragment和ListFragment更改为您自己的片段。你也可以通过usng setTargetFragment在这个tabfragments中添加一个DialogFragment,但这不是你的问题。

答案 3 :(得分:0)

我建议您按照Android设计模式进行导航:

<强> http://developer.android.com/design/patterns/navigation.html