我有一个片段,我试图添加到一个视图。
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的片段布局。
我上面写的对吗?
我有同样的问题,当做片段事务,而活动创建。
核心问题是什么尼克已经指出-视图树还没有膨胀。但是他的解决方案并没有起作用——在onResume, onPostCreate等中出现了同样的异常。
解决方案是在容器片段中添加回调,以便在它准备好时发出信号:
public class MyContainerFragment extends Fragment {
public static interface Callbacks {
void onMyContainerAttached();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "--- onAttach");
((Callbacks) activity).onMyContainerAttached();
}
//... rest of code
}
然后在活动中:
public class MainActivity extends Activity
implements MyContainerFragment.Callbacks
{
@Override
public void onMyContainerAttached() {
getFragmentManager()
.beginTransaction()
.replace(R.id.containerFrame, new MyFragment())
.commit();
}
//...
}
我在另一个线程上读到的答案与此类似,当我遇到这个问题时,它涉及到布局xml。
你的日志显示“没有为id 0x7f080011找到视图”。
打开gen->包->R.java->id,然后查找id 0x7f080011。
当我遇到这个问题时,这个id属于activity_main.xml文件中的FrameLayout。
FrameLayout没有一个ID(没有声明android: ID = "blablabla")。
确保所有布局中的所有组件都有id,特别是logcat中引用的组件。
这个页面似乎是发布关于片段IllegalArgumentException的建议的一个很好的中心位置。还有一件事你可以试试。这是最后对我有用的方法:
我忘了我有一个单独的横向布局文件。在我添加了我的FrameLayout容器之后,这个片段也工作了。
On a separate note, if you have already tried everything else suggested on this page (and the entire Internet, too) and have been pulling out your hair for hours, consider just dumping these annoying fragments and going back to a good old standard layout. (That's actually what I was in the process of doing when I finally discovered my problem.) You can still use the container concept. However, instead of filling it with a fragment, you can use the xml include tag to fill it with the same layout that you would have used in your fragment. You could do something like this in your main layout:
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include layout="@layout/former_fragment_layout" />
</FrameLayout>
其中former_fragment_layout是您试图在片段中使用的XML布局文件的名称。有关更多信息,请参见使用include重用布局。