美好的一天,试图澄清一下:如果我有这种布局的肖像布局
main.xml中:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/configFragment_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.settingsFragment">
</fragment>
这适用于横向(主要用于平板电脑),main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/configFragment_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.SettingsFragment" ></fragment>
<fragment
android:id="@+id/detailFragment_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.Example.DetailFragment" >
<!-- Preview: layout=@layout/details -->
</fragment>
</LinearLayout>
现在在我的SettingFragment中,我实现了一个按钮来转到DetailFragment:
DetailFragment fragment = (DetailFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.detailFragment_id);
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
if (fragment != null && fragment.isInLayout()) {
DetailFragment detailfragment = new WallpaperFragment();
fragmentTransaction.add(R.id.detailFragment_id, detailfragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}else{
Intent intent = new Intent(getActivity().getApplicationContext(),DetailActivity.class);
startActivity(intent);
}
我现在正在实现动态片段还是我仍在使用静态片段?或者当我使用像FrameLayout这样的视图组代替片段标记元素时,我是否只使用动态片段?
想法是为手机提供单一窗格,为平板电脑设置多窗格。我知道混合静态和动态片段是一个坏主意,但它有点令人困惑。谢谢。
答案 0 :(得分:0)
你知道,我可能在这里错了(所以请随意纠正我),但看起来你正在使用静态和动态片段。在您的XML布局中,您添加了片段,然后通过活动中的片段事务重新实例化它们。或者,如果您已经声明了一个容器(例如FrameLayout)而不是XML中的片段,则必须使用FragmentTransaction在运行时添加片段。
在你的例子中,你只是踩着你已经准备好的片段。基本上,操作系统在膨胀时会看到XML中的片段(我认为它是在调用片段代码时?)并通过片段中的标记执行与之关联的代码。然后,您的应用会将相同的片段添加到其顶部。一个简单的方法是在Fragment类的onCreateView方法中添加一个LogCat调用。如果您不止一次地看到它,那么您使用相同的片段踩到前一个片段(我99%确定您是这样)。希望这有助于回答您的问题!
答案 1 :(得分:0)
静态片段在布局中定义,通常不会在运行时添加或删除。它们在代码中由id引用。它们通常被放置为如下布局的子元素。一旦在这里定义了它们,android就会知道制作一个片段,这就是你所要做的一切。
<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"
android:weightSum="1">
<fragment
android:id="@+id/fooFragment"
android:name="com.example.myapplication.TestFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
动态片段在您的代码中定义,可以在运行时进行操作,添加,删除等。它们看起来像这样:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.your_placeholder, new TestFragment());
ft.commit();