来自另一个活动的片段引用返回null

时间:2014-09-10 18:17:29

标签: java android android-fragments

我在纵向模式下在新活动中启动细节片段,如此......

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位于我刚刚来自的Activity中,当我的片段处于两个独立的活动中时,我无法获得引用吗?更好的是获得f1引用的正确方法是什么?

- 感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

当一个活动正在运行时,你可以使用这4个步骤在其布局中添加一个片段。

  1. 获得片段管理器
  2. 的参考资料
  3. 开始片段交易
  4. 添加片段
  5. 提交片段事务

    FragmentManager mFragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = mFragmentManager
            .beginTransaction();
    fragmentTransaction.add(R.id.title_fragment_container,
            new TitlesFragment());
    fragmentTransaction.commit();
    
  6. 确保您使用的是提交。

答案 1 :(得分:0)

如果您已开始新活动,则与之前活动相关的所有片段(在您的情况下为f1)在当前活动中不可用。我想到的最快的解决方案是通过意图传递更多参数,这些参数在纵向模式下的细节活动中是必需的。