2017-03-19 124 views
1

我正在學習Android,由於活動和片段之間的通信,我被卡在「片段」章節。讓我介紹我的問題:爲什麼我的片段仍然存在方向變化

得到了MainActivity,我勢必2個片段並列,分別AlimentFragmentDetailAlimentFragment使用,

在橫向:

<?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(); 
     } 
    } 

用戶進程互動:肖像

  1. 啓動應用程序(只列出從AlimentFragment顯示)
  2. 按項目並詳細項目視圖替換我的列表項
  3. 從 更改爲風景(這裏我們可以看到清單在左邊和詳細區域 在右邊)
  4. 點擊項目和DetailAlimentFragment從景觀左
  5. 切換到肖像正確更新 又一次看到的只是一個列表 項目對項目再次點擊拋出NullPointerException

在步驟5中,我發現修復異常的方式是:

if (detailFragment != null && findViewById(R.id.fgt_container) == null) { 

相反的:

if (detailFragment != null){ 

問題:

當我從風景改變爲肖像時,我的DetailAlimentFragment仍然存在,但爲什麼?每次我點擊縱向方向的物品時,是否應該撥打DetailActivity

如果你需要更多樣品,告訴我! ;)

+0

這是主細節流程。在Android studio中,您可以使用相同的新項目,並且知道發生了什麼。這可能會給你答覆有關DetailActivity – Raghunandan

+0

@Raghunandan我不確定你對新項目的意思。 –

+0

@Raghunandan我終於找到你說的。謝謝。 –

回答

0

我終於找到了一些有用的幫助。

在Android Studio「新項目」中,我可以選擇模板「主/細節流程」活動來生成有用的一段代碼來掌握它。

相關問題