Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 嵌套片段:java.lang.IllegalArgumentException:找不到id的视图_Android_Android Viewpager_Fragment - Fatal编程技术网

Android 嵌套片段:java.lang.IllegalArgumentException:找不到id的视图

Android 嵌套片段:java.lang.IllegalArgumentException:找不到id的视图,android,android-viewpager,fragment,Android,Android Viewpager,Fragment,我有一个片段a,包含一个listview。在这个listview中,我添加了一个listheader,其中包含一个通过子片段进行分页的ViewPager 当用户单击列表中的项目时,listfragment A将被该listitem的详细视图片段替换 我希望用户能够通过单击“上一步”按钮返回列表 到目前为止,一切都正常,除了当用户按下“上一步”按钮从堆栈中弹出细节片段以返回listview片段A时,应用程序崩溃,出现一个错误 java.lang.IllegalArgumentException:

我有一个片段a,包含一个listview。在这个listview中,我添加了一个listheader,其中包含一个通过子片段进行分页的ViewPager

当用户单击列表中的项目时,listfragment A将被该listitem的详细视图片段替换

我希望用户能够通过单击“上一步”按钮返回列表

到目前为止,一切都正常,除了当用户按下“上一步”按钮从堆栈中弹出细节片段以返回listview片段A时,应用程序崩溃,出现一个错误

java.lang.IllegalArgumentException: No view found for id 0x7f06002e (com.makamedia.hockeyweb:id/news_header_pager) for fragment NewsHeaderFragment{41f7b6f8 #0 id=0x7f06002e android:switcher:2131099694:0}
我怀疑listheader中viewpager的嵌套片段可能在viewpager被重新创建之前被重新创建,从而导致应用程序崩溃,但我不确定

感谢您的帮助

listheader viewpager的My ViewPagerAdapter(删除了一些不相关的代码):

My viewpager以xml的行布局声明,并按如下方式添加:

private void addHeaderPager(int count) {
    if(mNewsListAdapter != null && mNewsListAdapter.getCount()>0) {
        if (count >= mNewsListAdapter.getCount()) {
            count = mNewsListAdapter.getCount() - 1;
        }
        LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mHeader = (RelativeLayout) inflater.inflate(R.layout.row_big_news_pager, null);
        mHeaderPager = (ViewPager) mHeader.findViewById(R.id.news_header_pager);
        mHeaderPagerAdapter = new NewsHeaderAdapter(getChildFragmentManager(), count, 6000, mNewsListAdapter);
        mHeaderPager.setOffscreenPageLimit(count);
        mHeaderPager.setAdapter(mHeaderPagerAdapter);
        // Bind the title indicator to the adapter
        CirclePageIndicator circleIndicator = (CirclePageIndicator) mHeader.findViewById(R.id.news_header_pager_indicator);
        circleIndicator.setViewPager(mHeaderPager);
        mNewsListView.addHeaderView(mHeader);
    }
}

您确定在AddHeaderPage()中使用了正确的FragmentManager吗


我通常使用
getFragmentManager()
,如果有父片段,我必须使用
getParentFragment().getFragmentManager()
-如果没有,我在尝试替换当前可见片段时会遇到相同的错误(“找不到id视图”)。

您解决过这个问题吗,我也遇到了同样的问题
public class NewsHeaderFragment extends Fragment {

private NewsItem mNewsItem;
private TextView mHeaderNewsBigTitle;
private ImageView mHeaderNewsBigImage;

// Convenience method for creating a new fragment with parameters
public static NewsHeaderFragment getNew(NewsItem item){
    NewsHeaderFragment fragment = new NewsHeaderFragment();
    Bundle args = new Bundle();
    args.putSerializable(Constants.SIG_NEWS_ITEM, item);
    fragment.setArguments(args);
    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.row_big_news, container, false);
    Bundle newsHeaderArgs = getArguments();
    mNewsItem = (NewsItem)newsHeaderArgs.getSerializable(Constants.SIG_NEWS_ITEM);
    setupUI(rootView);
    fillUI();
    return rootView;
}

private void fillUI() {
    mHeaderNewsBigTitle.setText(mNewsItem.getTitle());
    Picasso.with(getActivity()).load(mNewsItem.getImageBig2x()).into(mHeaderNewsBigImage);
}

private void setupUI(View rootView) {
    mHeaderNewsBigTitle = (TextView) rootView.findViewById(R.id.news_big_title);
    mHeaderNewsBigImage = (ImageView) rootView.findViewById(R.id.news_big_img);
}
}
private void addHeaderPager(int count) {
    if(mNewsListAdapter != null && mNewsListAdapter.getCount()>0) {
        if (count >= mNewsListAdapter.getCount()) {
            count = mNewsListAdapter.getCount() - 1;
        }
        LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mHeader = (RelativeLayout) inflater.inflate(R.layout.row_big_news_pager, null);
        mHeaderPager = (ViewPager) mHeader.findViewById(R.id.news_header_pager);
        mHeaderPagerAdapter = new NewsHeaderAdapter(getChildFragmentManager(), count, 6000, mNewsListAdapter);
        mHeaderPager.setOffscreenPageLimit(count);
        mHeaderPager.setAdapter(mHeaderPagerAdapter);
        // Bind the title indicator to the adapter
        CirclePageIndicator circleIndicator = (CirclePageIndicator) mHeader.findViewById(R.id.news_header_pager_indicator);
        circleIndicator.setViewPager(mHeaderPager);
        mNewsListView.addHeaderView(mHeader);
    }
}