2014-09-10 209 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中)关联的所有片段在当前活动中不可用。我想到的最快解决方案是通过意图传输更多纵向模式下细节活动所需的参数。