2014-09-10 96 views
0

我在縱向模式下,像這樣,當啓動一個細節片段在新的活動....Fragement參考返回null

fDetail=(HistoryOFragDetail) manager.findFragmentById(R.id.fragment2); 
     if(fDetail!=null&& fDetail.isVisible()) 
     { 
      fDetail.changeData(st); 

     }else{ // portrait 

      Intent intent = new Intent(this, HistoryOActFrag.class); 
      intent.putExtra("index", st); 


      startActivity(intent); 
     } 

而在縱向模式我加載片段是這樣的...

public class HistoryOActFrag extends SherlockFragmentActivity... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.history_actifrag_layout); 

Intent intent = getIntent(); 
String myIndex = intent.getStringExtra("index"); 

    HistoryOFragDetail f2 = (HistoryOFragDetail)getSupportFragmentManager().findFragmentById(R.id.fragment2); 
    f2.changeData(myIndex); 



} 

佈局如下...

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

     <fragment 
     android:id="@+id/fragment2" 
     android:name="com.myFragTesting.OIn.HistoryOFragDetail" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

問題...

每次我嘗試在活動中獲得對片段的引用時,我只是從我得到一個NPE。下面的代碼添加失敗。

public class HistoryOActFrag extends SherlockFragmentActivity... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.history_actifrag_layout); 

Intent intent = getIntent(); 
String myIndex = intent.getStringExtra("index"); 

HistoryOFragDetail f2 = (HistoryOFragDetail)getSupportFragmentManager().findFragmentById(R.id.fragment2); 
f2.changeData(myIndex); 


/// ..................new step here .... 
    HistoryOFragMaster f1 = (HistoryOFragMaster)getSupportFragmentManager().findFragmentById(R.id.fragment1); 
    Log.d("myLog","......f1 = "+f1"); //// = NULL ???? Why can't I do this ? 



} 

在景觀時我把我的碎片放在一個活動和參考工作正常。

我意識到fragment1在活動中,我剛纔來自我的碎片是在兩個單獨的活動時,我不能得到一個參考?更好的是什麼是正確的方法來獲得對f1的參考?

- 感謝您的幫助。

回答

0

活動正在運行時,可以使用以下4個步驟將碎片添加到其佈局。

  1. 得到一個refrence到段管理
  2. 開始片段交易
  3. 添加片段
  4. 提交的片段交易

    FragmentManager mFragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = mFragmentManager 
         .beginTransaction(); 
    fragmentTransaction.add(R.id.title_fragment_container, 
         new TitlesFragment()); 
    fragmentTransaction.commit(); 
    

確保您使用的是承諾。

+0

如果僅使用xml佈局添加片段,該怎麼辦? – AhabLives 2014-09-10 18:29:36

+0

以上代碼中的title_fragment_container是以xml佈局保存的片段。 – 2014-09-10 18:30:40

0

如果您已開始新活動,則與以前活動(在您的情況f1中)關聯的所有片段在當前活動中不可用。我想到的最快解決方案是通過意圖傳輸更多縱向模式下細節活動所需的參數。