使用viewpager的片段事务返回空白视图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用viewpager的片段事务返回空白视图相关的知识,希望对你有一定的参考价值。
我正在使用带有视图寻呼机的tablayout来显示片段。我目前的设置是,我获得了“类别”的列表视图,用户点击了一个类别,然后返回一个新片段,其中包含该类别中可用折扣的列表。
我的设置创建了新的DiscountList片段,但在原始片段执行其事务时不会更新视图。有人可以帮我找出正确的解决方案吗?我不确定我的viewpager是不正确还是我错过了一步。如果需要,我可以提供更多信息。谢谢!
category list fragment.Java:
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_categories, container, false);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(container.getId(), DiscountListFragment.newInstance(position))
.addToBackStack(null)
.commit();
}
});
return view;
}
discount list fragment.Java
public static DiscountListFragment newInstance(int categoryId) {
DiscountListFragment discountListFragment = new DiscountListFragment();
Bundle args = new Bundle();
args.putInt("categoryId", categoryId);
discountListFragment.setArguments(args);
return discountListFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
categoryId = getArguments().getInt("categoryId");
}
reactiveLocationProvider = new ReactiveLocationProvider(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_search_discount_list, container, false);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
view pager.Java
/**
* Retrieves the selected tab and returns it. If new tab needs to be added
* simply increment case and return a new fragment
* @param position the position of tab selected
* @return the selected tab
*/
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new HomeFragment();
case 1:
return new CategoryListFragment();
case 2:
return new MapViewFragment();
case 3:
return new MessagesFragment();
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
替换ViewPager
中的片段的最佳方法是创建加载到寻呼机中的根片段。根分片默认加载fragment1,稍后可以用fragment2替换。有人为此做了一个很好的例子并把它放在Github上:https://github.com/danilao/fragments-viewpager-example
我将采用与示例略有不同的方法,并让根片段负责切换片段,而不是子片段本身。但这是一个架构决策,取决于你。
我认为你的transaction.replace()
电话中的容器ID是错误的。如果CategoryListFragment
是分页片段,那么container.getId()是ViewPager
的id。你不希望这样。您想要包含带有ViewPager
(一级)的片段的容器的id。
我遇到了同样的问题,花了很多时间。我变了
mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());
至
mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
Viewpager片段。我得到了here的帮助
以上是关于使用viewpager的片段事务返回空白视图的主要内容,如果未能解决你的问题,请参考以下文章
如何用 ViewPager 中的另一个片段替换 Android 片段?