我正在寻找使用sherlock操作栏的标签导航的最佳做法。 更改片段的正确方法是什么,并在选择另一个选项卡时将片段添加到Backstack并清除后栈。
是否有任何好的示例或开源项目显示如何正确执行?
答案 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.java
或FragmentTabsPager.java
。
如果你想使用ActionBarSherlock,你也可以download ActionBarSherlock查看/ samples目录中的samples文件夹。在那里,您有TabNavigation.java
和TabNavigationCollapsed.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 强>