我正在使用带有视图寻呼机的tablayout来显示片段。我目前的设置是,我获得了“类别”的列表视图,用户点击了一个类别,然后返回一个新的片段,其中包含该类别中可用折扣的列表。
我的设置会创建新的DiscountList片段,但在原始片段执行其事务时不会更新视图。有人可以帮我找出正确的解决方案吗?我不确定我的viewpager是不正确还是我错过了一步。如果需要,我可以提供更多信息。谢谢!
CategoryListFragment.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;
}
DiscountListFragment.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;
}
ViewPager.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;
}
答案 0 :(得分:2)
替换ViewPager
中的片段的最佳方法是创建加载到寻呼机中的根片段。根分片默认加载fragment1,稍后可以用fragment2替换。
有人为此做了一个很好的例子,并把它放在Github上:https://github.com/danilao/fragments-viewpager-example
我会采用与示例稍微不同的方法,并让根片段负责切换片段,而不是子片段本身。但这是一个架构决策,取决于你。
答案 1 :(得分:0)
我认为transaction.replace()
电话中的容器ID错误。如果CategoryListFragment
是分页片段,则container.getId()是ViewPager
的id。你不想要那个。您需要包含具有ViewPager
(一级)的片段的容器的id。
答案 2 :(得分:0)
我遇到了同样的问题,花了很多时间。我改变了
mSectionsPagerAdapter = new SectionsPagerAdapter(getActivity().getSupportFragmentManager());
到
mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
的Viewpager片段。 我得到了here
的帮助