使用refs.xml时,主/细碎片段onAttach调用了两次

时间:2014-09-28 16:51:11

标签: android android-fragments

我在我的应用程序上使用Master / Detail设计,我想支持手机和手机片。当我尝试使用refs.xml XML引用xml时,我遇到了一种奇怪的行为。当我使用这种方法时,我的ListFragment被调用两次,下面是我的设备中的Logcat。

com.project.android D/MainActivity﹕ onCREATE
com.project.android D/ContactList﹕ onAttach
com.project.android D/ContactList﹕ onActivityCreated
com.project.android D/ContactList﹕ onAttach
com.project.android D/ContactList﹕ onActivityCreated
com.project.android D/ContactList﹕ onStart
com.project.android D/ContactList﹕ onStart
com.project.android D/ContactList﹕ onResume
com.project.android D/ContactList﹕ onResume

这是预期的行为吗?如何避免这种双重初始化?

我将手机refs.xml放在布局文件夹中,下面是我的refs.xml

<resources>
    <item name="activity_masterdetail" type="layout">@layout/contacts_phone</item>
</resources>

我将平板电脑版本放在layout-sw600dp文件夹中,下面是我的refs.xlm

<resources>
    <item name="activity_masterdetail" type="layout">@layout/contacts</item>
</resources>

在我的MainActivity中,我会执行以下操作。

@覆盖 protected void onCreate(Bundle savedInstanceState){     super.onCreate(savedInstanceState);

Log.d("MainActivity","onCREATE");

setContentView(R.layout.activity_masterdetail);

if (findViewById(R.id.fragment_container) != null) {

    if (savedInstanceState != null) {
        return;
    } 
        firstFragment = new ContactsListFragment();
        firstFragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit();

}

以下是我的布局。

contacts_phone.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

contacts.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:showDividers="middle">

    <fragment android:name="com.project.android.fragment.ContactsListFragment"
              android:id="@+id/fragment_container"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.project.android.fragment.ContactDetailsFragment"
              android:id="@+id/contact_detail_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>

0 个答案:

没有答案