我在我的应用程序上使用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>