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