我有一个片段,我试图添加到一个视图。
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");
}
当这段代码执行时,我在调试中得到以下错误。
java.lang.IllegalArgumentException: No view found for id 0x7f080011
for fragment feed_parser_activity{41882f50 #2 id=0x7f080011}
feed_parser_activity是一个片段,在xml中被设置为片段布局。
我使用FragmentActivity来托管持有feed_parser_layout的片段布局。
我上面写的对吗?
我在另一个线程上读到的答案与此类似,当我遇到这个问题时,它涉及到布局xml。
你的日志显示“没有为id 0x7f080011找到视图”。
打开gen->包->R.java->id,然后查找id 0x7f080011。
当我遇到这个问题时,这个id属于activity_main.xml文件中的FrameLayout。
FrameLayout没有一个ID(没有声明android: ID = "blablabla")。
确保所有布局中的所有组件都有id,特别是logcat中引用的组件。
在我的情况下,我试图显示一个包含页导航的DialogFragment,当FragmentPagerAdapter试图将片段添加到页导航时,这个异常被抛出。根据howettl的回答,我猜这是由于寻页器的父母不是在setContentView()在我的FragmentActivity的视图设置。
我唯一做的改变来解决这个问题是创建FragmentPagerAdapter通过调用getChildFragmentManager()获得的FragmentMager,而不是通过调用getFragmentManager()获得的,因为我通常这样做。
public class PagerDialog extends DialogFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.pager_dialog, container, false);
MyPagerAdapter pagerAdapter = new MyPagerAdapter(getChildFragmentManager());
ViewPager pager = (ViewPager) rootView.findViewById(R.id.pager);
pager.setAdapter(pagerAdapter);
return rootView;
}
}
如果您试图用fragmentManager替换片段中的片段,但是您没有膨胀父片段,这可能会导致问题。
在BaseFragment.java中OnCreateView:
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.replace(R.id.container, new DifferentFragment())
.commit();
}
return super.onCreateView(inflater, container, savedInstanceState);
取代超级。onCreateView(膨胀器,容器,savedInstanceState);
通过膨胀片段的正确布局:
return inflater.inflate(R.layout.base_fragment, container, false);