1
我正在學習Android,由於活動和片段之間的通信,我被卡在「片段」章節。讓我介紹我的問題:爲什麼我的片段仍然存在方向變化
得到了MainActivity
,我勢必2個片段並列,分別AlimentFragment
和DetailAlimentFragment
使用,
在橫向:
<?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">
<fragment android:name="supersk.training.android.gestionstock.AlimentFragment"
android:id="@+id/fgt_aliment"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent">
</fragment>
<fragment android:name="supersk.training.android.gestionstock.DetailAlimentFragment"
android:id="@+id/fgt_detail"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent">
</fragment>
</LinearLayout>
在縱向:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fgt_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在我的MainActivity
上,我定義了覆蓋接口方法define d我AlimentFragment
類:
@Override
public void onAlimentSelection(Aliment aliment) {
// l'utilisateur selectionne un item dans la liste depuis AlimentFragment
Log.d(MainActivity.class.getSimpleName(), "[onAlimentSelection] method triggered !");
DetailAlimentFragment detailFragment = (DetailAlimentFragment)
getSupportFragmentManager().findFragmentById(R.id.fgt_detail);
if (detailFragment != null){
// si le fragment est disponible, on est en double vue
detailFragment.updateDetailAliment(aliment);
} else {
// si le fragment n'est pas disponible, on est en simple vue
// on créée le fragment et lui passe l'item selectionné
DetailAlimentFragment newDetailFragment = new DetailAlimentFragment();
Bundle args = new Bundle();
args.putParcelable(ARG_ALIMENT, aliment);
newDetailFragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fgt_container, newDetailFragment);
transaction.addToBackStack(null);
// Valider la transaction
transaction.commit();
}
}
用戶進程互動:肖像
- 啓動應用程序(只列出從
AlimentFragment
顯示) - 按項目並詳細項目視圖替換我的列表項
- 從 更改爲風景(這裏我們可以看到清單在左邊和詳細區域 在右邊)
- 點擊項目和
DetailAlimentFragment
從景觀左 - 切換到肖像正確更新 又一次看到的只是一個列表 項目對項目再次點擊拋出
NullPointerException
在步驟5中,我發現修復異常的方式是:
if (detailFragment != null && findViewById(R.id.fgt_container) == null) {
相反的:
if (detailFragment != null){
問題:
當我從風景改變爲肖像時,我的DetailAlimentFragment
仍然存在,但爲什麼?每次我點擊縱向方向的物品時,是否應該撥打DetailActivity
?
如果你需要更多樣品,告訴我! ;)
這是主細節流程。在Android studio中,您可以使用相同的新項目,並且知道發生了什麼。這可能會給你答覆有關DetailActivity – Raghunandan
@Raghunandan我不確定你對新項目的意思。 –
@Raghunandan我終於找到你說的。謝謝。 –