我正在寻找将标签导航与 sherlock 操作栏一起使用的最佳实践。更改碎片的正确方法是什么,并在选择另一个选项卡时将片段添加到Backstack并清除后堆栈。
有没有好的例子或开源项目展示如何正确地做到这一点?
我正在寻找将标签导航与 sherlock 操作栏一起使用的最佳实践。更改碎片的正确方法是什么,并在选择另一个选项卡时将片段添加到Backstack并清除后堆栈。
有没有好的例子或开源项目展示如何正确地做到这一点?
我不会直接使用 ABS 来做到这一点。一旦你的选项卡需要片段切换等,你就会遇到麻烦。我认为正确的方法是使用与 ABS 兼容的 ViewPagerIndicator。作为奖励,您还可以在选项卡之间左右滑动。您需要兼容包(如 ABS),您可以在 示例文件夹中找到示例用法。
正如 Edgar 提到的,android 导航指南是一个很好的起点。但是让我添加一些关于标签如何与 android 一起使用的评论。
新的 acitonbar 选项卡的实现方式应与它在 google play 应用程序中的工作方式相同。这意味着只要您想要某个选项卡中某些内容的一些详细信息,您就会转到一个新的视图/片段/活动,并且这些选项卡将消失。
因此,android 的选项卡不应一直可见,而应仅在顶层层次结构中可见。如果您想为用户简化导航,您将实现向上按钮,以便用户可以快速返回到顶部层次结构,其中选项卡可见。
教程和示例
我个人最喜欢的示例和教程是googles 网页上操作栏教程下的选项卡教程。
标签导航的示例也可以在 android-sdk 附带的示例项目中找到。转到:android-sdk\extras\android\support\samples\Support4Demos\src\com\example\android\supportv4\app
并寻找:FragmentTabs.java
或FragmentTabsPager.java
。
如果您想使用 ActionBarSherlock,您还可以下载 ActionBarSherlock并查看 /samples 目录中的示例文件夹。在那里你有标签演示TabNavigation.java
和TabNavigationCollapsed.java
。尽管我认为您应该尝试一下操作栏教程。
带有回栈的选项卡
还可以说您想要一个始终可见的标签栏(尽管不推荐)。然后你必须为每个选项卡制作一个自定义的后退堆栈,你可以在这里查看如何实现它的示例。
地图和标签
查看所有使用地图的 Google 应用。Google 使用溢出操作栏按钮来进行导航。因此,我们作为开发人员是否应该使用适用于 Android 的 Google mapsv2 选项卡,如果有人愿意的话,带有地图的标签会变得更加容易。
我已经多次使用片段和选项卡完成 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 ,但我猜这不是您的问题。
我建议您遵循 Android 导航设计模式:
http://developer.android.com/design/patterns/navigation.html