我想在view中添加一个fragment。
FragmentManager fragMgr=getSupportFragmentManager();
feed_parser_activity content=
(feed_parser_activity)fragMgr.findFragmentById(R.id.feedContentContainer);
FragmentTransaction xaction=fragMgr.beginTransaction();
if (content==null || content.isRemoving()) {
content=new feed_parser_activity(item.getLink().toString());
xaction
.add(R.id.feedContentContainer, content)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null)
.commit();
Log.e("Abstract", "DONE");
}
当上面这段代码执行后,在 debug中显示错误:
12-25 19:45:19.040: ERROR/AndroidRuntime(2835): java.lang.IllegalArgumentException: No view found for id 0x7f080011 for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}
feed_parser_activity是一个 Fragment,在xml中设置 Fragment 布局。
我用FragmentActivity来控制拥有feed_parser_layout布局的Fragment Layout。
以上的设置为什不正确呢?
在setContentView()
中指定了错误的布局,setContentView()
在 FragmentActivity的onCreate()
方法中。id传递到FragmentTransaction.add()
,在你的例子中R.id.feedContentContainer
必须是setContentView()
中指定的布局的子类。所以就不用onCreate()
方法。
@Override
protected void onResume()
{
super.onResume();
fragManager = getSupportFragmentManager();
Fragment answerPad=getDefaultAnswerPad();
setAnswerPad(answerPad);
setContentView(R.layout.abstract_test_view);
}
protected void setAnswerPad(AbstractAnswerFragment pad)
{
fragManager.beginTransaction()
.add(R.id.AnswerArea, pad, "AnswerArea")
.commit();
fragManager.executePendingTransactions();
}
注意:在setContentView之前建立 fragments。
转:我用的是Fragment嵌套Fragment做的,放fragment切换快的时候程序就会崩溃,解决这个办法就是在View生成前先将FragemnentManger创建好,就不会报错了
测试了 确实很有效果