7

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

有没有好的例子或开源项目展示如何正确地做到这一点?

4

4 回答 4

6

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

于 2012-10-29T20:56:26.327 回答
6

正如 Edgar 提到的,android 导航指南是一个很好的起点。但是让我添加一些关于标签如何与 android 一起使用的评论。

新的 acitonbar 选项卡的实现方式应与它在 google play 应用程序中的工作方式相同。这意味着只要您想要某个选项卡中某些内容的一些详细信息,您就会转到一个新的视图/片段/活动,并且这些选项卡将消失。

因此,android 的选项卡不应一直可见,而应仅在顶层层次结构中可见。如果您想为用户简化导航,您将实现向上按钮,以便用户可以快速返回到顶部层次结构,其中选项卡可见。

教程和示例

我个人最喜欢的示例和教程是googles 网页上操作栏教程下的选项卡教程。

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

如果您想使用 ActionBarSherlock,您还可以下载 ActionBarSherlock并查看 /samples 目录中的示例文件夹。在那里你有标签演示TabNavigation.javaTabNavigationCollapsed.java。尽管我认为您应该尝试一下操作栏教程。

带有回栈的选项卡

还可以说您想要一个始终可见的标签栏(尽管不推荐)。然后你必须为每个选项卡制作一个自定义的后退堆栈,你可以在这里查看如何实现它的示例。

地图和标签

查看所有使用地图的 Google 应用。Google 使用溢出操作栏按钮来进行导航。因此,我们作为开发人员是否应该使用适用于 Android 的 Google mapsv2 选项卡,如果有人愿意的话,带有地图的标签会变得更加容易。

于 2012-10-31T09:22:42.277 回答
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 更改为您自己的片段。您还可以通过使用 setTargetFragment 在其中一个选项卡片段中添加 DialogFragment ,但我猜这不是您的问题。

于 2012-10-31T15:10:00.527 回答
0

我建议您遵循 Android 导航设计模式:

http://developer.android.com/design/patterns/navigation.html

于 2012-10-31T08:39:07.367 回答