我有一个片段,我试图添加到一个视图。

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的片段布局。 我上面写的对吗?


当前回答

使用childFragmentManager代替activity!

其他回答

当你没有在app_bar_main.xml中放入<include layout="@layout/your_fragment_layout"/>时,也会发生这个问题

在我们的例子中,我们清除/损坏了class.dex文件以及gradle编译的输出。由于缓存重新编译没有尝试,因此没有错误,但apk没有所需的文件,导致这个令人困惑的错误。一个gradle resync和新的构建清除了我们所有的错误。

//快乐编码

在我的情况下,这个异常被抛出时,我使用不同的id为相同的布局元素(片段占位符),而有几个他们为不同的构建变体。出于某种原因,当你第一次替换fragment时它工作得很好,但如果你尝试再做一次,你会得到这个异常。 因此,如果您有不同构建变体的多个布局,请确保您使用相同的id。

当我试图用onCreateView()中的片段替换视图时,我遇到了这个问题。是这样的:

public class MyProjectListFrag extends Fragment {


    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();
    }

它告诉我

11-25 14:06:04.848: E/AndroidRuntime(26040): java.lang.IllegalArgumentException: No view found for id 0x7f05003f (com.example.myays:id/container_for_my_pro_list) for fragment MyProjectListFragment{41692f40 #2 id=0x7f05003f myProjectListFragment}

然后我修复了这个问题,把替换到onActivityCreated()。是这样的:

public class MyProjectListFrag extends Fragment {

    private final static String TAG = "lch";

    private MyProjectListFragment myProjectListFragment;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        return inflater
                .inflate(R.layout.frag_my_project_list, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        FragmentManager mFragmentManager = getFragmentManager();
        myProjectListFragment = new MyProjectListFragment();
        mFragmentManager
                .beginTransaction()
                .replace(R.id.container_for_my_pro_list,
                        myProjectListFragment, "myProjectListFragment")
                .commit();

    }

你必须在onCreateView()中返回一个视图,以便稍后替换它 你可以在fragment liftcycle中的以下函数中对这个视图进行任何操作,比如onActivityCreated()

希望这能有所帮助!

当在两个片段中有两个具有相同id的视图时,也会发生这种情况