Android - 一个选项卡中的多个片段
Posted
技术标签:
【中文标题】Android - 一个选项卡中的多个片段【英文标题】:Android - Multiple fragments in ONE tab 【发布时间】:2012-10-08 22:37:11 【问题描述】:我在网上搜索了很多关于在一个操作栏选项卡中包含多个片段的可能性。
This question 最符合我的需求,但代码不起作用。
是否有另一种可能在一个选项卡中包含多个片段?
这是StartActivity
public class StartActivity extends FragmentActivity implements ActionBar.TabListener
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
// Set up the action bar.
final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.addTab(
actionBar.newTab()
.setText("Karte")
.setTabListener(new MapFragmentListener(this)));
对应的布局acticity_start
包含两个框架布局,用于将放置在选项卡中的两个片段。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >
<FrameLayout
android:id="@+id/fragment_map"
android:layout_
android:layout_/>
<FrameLayout
android:id="@+id/fragment_realtime"
android:layout_
android:layout_/>
</LinearLayout>
TabListener
看起来像这样:
private class TabListener implements ActionBar.TabListener
private static final String fragment1_tag = "fragment1_tag";
private static final String fragment2_tag = "fragment2_tag";
private FragmentActivity activity;
private RealtimeFragment fragment1;
private RealtimeFragment fragment2;
public TabListener(FragmentActivity activity)
this.activity = activity;
android.support.v4.app.FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
fragment1 = (RealtimeFragment) activity.getSupportFragmentManager().findFragmentByTag(fragment1_tag);
if (fragment1 != null && !fragment1.isDetached())
ft.detach(fragment1);
fragment2 = (RealtimeFragment) activity.getSupportFragmentManager().findFragmentByTag(fragment2_tag);
if (fragment2 != null && !fragment2.isDetached())
ft.detach(fragment2);
ft.commit();
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
// TODO Auto-generated method stub
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
android.support.v4.app.FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();
if(fragment1 == null)
fragment1 = new RealtimeFragment();
fragmentTransaction.add(R.id.fragment_map, fragment1, fragment1_tag);
else
fragmentTransaction.attach(fragment1);
if(fragment2 == null)
fragment2 = new RealtimeFragment();
fragmentTransaction.add(R.id.fragment_realtime, fragment2, fragment2_tag);
else
fragmentTransaction.attach(fragment2);
fragmentTransaction.commit();
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
android.support.v4.app.FragmentTransaction fragementTransaction = activity.getSupportFragmentManager().beginTransaction();
if(fragment1_tag != null)
fragementTransaction.detach(fragment1);
if(fragment2 != null)
fragementTransaction.detach(fragment2);
fragementTransaction.commit();
RealtimeFragment
类和对应的布局fragment_realtime
如下所示:
public class RealtimeFragment extends Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view = inflater.inflate(R.layout.fragment_realtime, container, false);
return view;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_
android:layout_
android:text="Button" />
</LinearLayout>
现在应该在一个标签中显示RealtimeFragment
类的两个片段。片段只显示一个按钮,但没有显示!为什么?
【问题讨论】:
为什么不发布一些代码和您遇到的错误? 【参考方案1】:我正在寻找相同主题的解决方案,并找到了这个,它非常方便。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_
android:layout_>
<fragment android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_
android:layout_ />
<fragment android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_
android:layout_ />
</LinearLayout>
所以引用你的 Fragment 并膨胀它,就像普通的 Fragment 一样
【讨论】:
以上是关于Android - 一个选项卡中的多个片段的主要内容,如果未能解决你的问题,请参考以下文章
如何在每个操作栏选项卡中维护多个Fragment堆栈或多个子片段