我在纵向模式下在新活动中启动细节片段,如此......
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引用的正确方法是什么?
- 感谢您的帮助。
答案 0 :(得分:0)
当一个活动正在运行时,你可以使用这4个步骤在其布局中添加一个片段。
提交片段事务
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.title_fragment_container,
new TitlesFragment());
fragmentTransaction.commit();
确保您使用的是提交。
答案 1 :(得分:0)
如果您已开始新活动,则与之前活动相关的所有片段(在您的情况下为f1)在当前活动中不可用。我想到的最快的解决方案是通过意图传递更多参数,这些参数在纵向模式下的细节活动中是必需的。