我在主活动中有一个主片段/ViewPager片段,主片段有Viewpager2
,我在其中通过适配器将子片段添加到ViewPager
。之前我在主活动中有一个方法(也有视图分页器)
public void ChangeFragment_ViewPager(int position, boolean outside) {
if (viewPager!=null){
viewPager.setCurrentItem(position);
}
}
当我从viewpager的任何子片段调用时,这个方法很容易改变片段,但是由于我将viewpager移到了Main片段,所以我的viewpager总是从子片段返回null。
MainFragment.newInstance().ChangeFragment_ViewPager(0, false);
主要片段
public class MainFragment extends Fragment {
ViewPager2 viewPager;
public MainFragment() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
public static MainFragment newInstance() {
MainFragment fragment = new MainFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.main_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
viewPager = view.findViewById(R.id.Navigation_Drawer_ViewPager);
TabAdapter tabAdapter = new TabAdapter(getChildFragmentManager(), getLifecycle());
viewPager.setAdapter(tabAdapter);
}
public void ChangeFragment_ViewPager(int position, boolean outside) {
if (viewPager!=null){
viewPager.setCurrentItem(position);
}
}
翼片适配器
public class TabAdapter extends FragmentStateAdapter {
String TAG="###TAB ADAPTER###";
public TabAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@NonNull
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
Log.d(TAG, "Fragment 1");
return FriendsList.newInstance();
case 1:
Log.d(TAG, "Fragment 2");
return PPL_main.newInstance();
}
return FriendsList.newInstance();
}
@Override
public int getItemCount() {
return 2;
}
}
如何从任何ViewPager的子片段更改片段?
1条答案
按热度按时间rdrgkggo1#
MainFragment.newInstance().ChangeFragment_ViewPager(0,false);
这行代码示例化了一个全新的
MainFragment
示例;因此您找到了空的ViewPager
。相反,需要片段管理器中存在的当前示例,或者简单地使用
ViewPager
子页面片段中的requireParentFragment()
来获得托管ViewPager
的MainFragment
: