Java 来自其他活动的Fragement引用返回null
在纵向模式下,我在一个新活动中启动一个细节片段,如下所示Java 来自其他活动的Fragement引用返回null,java,android,android-fragments,Java,Android,Android Fragments,在纵向模式下,我在一个新活动中启动一个细节片段,如下所示 fDetail=(HistoryOFragDetail) manager.findFragmentById(R.id.fragment2); if(fDetail!=null&& fDetail.isVisible()) { fDetail.changeData(st); }else{ // portrait Intent
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>
当我在景观中时,我把我的片段保存在一个活动中,参考工作做得很好
我意识到fragment1就在我刚开始的活动中,当我的片段在两个不同的活动中时,我能不能得到一个引用?更好的是,什么是获得f1参考的正确方法
-感谢您的帮助。当活动正在运行时,您可以使用以下4个步骤将片段添加到其布局中
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.title_fragment_container,
new TitlesFragment());
fragmentTransaction.commit();
确保您正在使用提交。如果您已启动新活动,则与以前活动(在您的案例中为f1)相关的所有片段在当前活动中都不可用。我想到的最快解决方案是通过intent传输更多参数,这些参数在纵向模式下的详细活动中需要。如果只使用xml布局添加片段会怎么样?上述代码中的title_fragment_容器是保存在xml布局中的片段。
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.title_fragment_container,
new TitlesFragment());
fragmentTransaction.commit();