Android 使用片段实现操作栏选项卡
因此,最近我需要实现操作栏选项卡,用一个新片段替换当前片段。尽管进行了数小时的密集搜索,但我无法找到一个明确的解决方案,因此我想在这里介绍一下我是如何解决这个问题的。其中两个片段包含列表视图,这是一个主要的复杂因素 首先创建要将片段附加到的活动。在该活动的XML文件中添加如下线性布局:Android 使用片段实现操作栏选项卡,android,android-fragments,android-actionbar,Android,Android Fragments,Android Actionbar,因此,最近我需要实现操作栏选项卡,用一个新片段替换当前片段。尽管进行了数小时的密集搜索,但我无法找到一个明确的解决方案,因此我想在这里介绍一下我是如何解决这个问题的。其中两个片段包含列表视图,这是一个主要的复杂因素 首先创建要将片段附加到的活动。在该活动的XML文件中添加如下线性布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".WoodenSideProject" >
<LinearLayout
android:id="@+id/fragment_placeholder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
在同一活动中创建以下类:
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
//do what you want when tab is reselected, I do nothing
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_placeholder, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}
我不知道其他人是否和我一样在用片段实现操作栏标签时遇到了很多麻烦,但如果他们遇到了麻烦,我希望这会有所帮助。任何关于更好实施的建议都将不胜感激 如果你犯了这样的错误怎么办?AndroidRuntime(5485):java.lang.IllegalStateException:故障保存状态:active已清除索引:-1然后您将收到错误,应用程序将关闭=)这是比谷歌指南中提供的更好的TabListener实现。
public class ActivityName extends FragmentActivity {
public static Context appContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_project);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
setTitle("WoodenSideProject");
ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1");
ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2");
ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3");
Fragment Fragment1Name = new Fragment1Name();
Fragment Fragment2Name = new Fragment2Name();
Fragment Fragment3Name = new Fragment3Name();
tab1.setTabListener(new MyTabsListener(Fragment1Name));
tab2.setTabListener(new MyTabsListener(Fragment2Name));
tab3.setTabListener(new MyTabsListener(Fragment3Name));
actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
}
class MyTabsListener implements ActionBar.TabListener {
public Fragment fragment;
public MyTabsListener(Fragment fragment) {
this.fragment = fragment;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
//do what you want when tab is reselected, I do nothing
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(R.id.fragment_placeholder, fragment);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(fragment);
}
}