2015-05-09 78 views
0

我已經看到了類似的問題,這張貼在這裏,但一直無法找出我一直在做錯誤的:更換一個片段與另一個

所以我有一個listFragment和detailsFragment。當按下listFragment中的按鈕時,我希望它顯示detailsFragment。

這是我的佈局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 

<FrameLayout 
    android:id="@+id/listContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

<FrameLayout 
    android:id="@+id/detailsContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:visibility="gone"/> 

這是我的FragmentTransaction代碼:

public void onRssItemSelected(String link) { 
    Boolean dual_pane = getResources().getBoolean(R.bool.dual_pane); 
    if (dual_pane==true) { 
     DetailFragment fragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment); 
     fragment.setText(link); 
    } else { 
     DetailFragment fragment = new DetailFragment(); 

     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.listContainer, fragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 

     fragment.setText(link); 
    } 
} 

景觀版本工作正常,但畫像總是崩潰。正如我所說我已經看了很多類似的問題,但沒有看到我做錯了什麼。 我也嘗試使用替換(R.id.detailsContainer,片段)無濟於事。

非常感謝!

+3

您需要發佈的堆棧跟蹤的崩潰。 – inmyth

回答

0

它看起來像這條線是造成問題:

fragment.setText(鏈接);

因爲你的片段還沒有完成創建/繪圖。

嘗試從else語句刪除提及行和添加到您的代碼:

... 
} else { 
    DetailFragment fragment = new DetailFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("LINK", link); 
    fragment.setArguments(bundle); 
... 

,然後在片段的onCreateView() 電話:

if (getArguments() != null) { 
    setText(getArguments().getString("LINK")); 
} 
0
Bundle bundle = new Bundle(); 
FragmentManager fragmentManager = getFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
bundle.putString("key", link); 
fragmentTransaction.replace(R.id.listContainer, fragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit();