问题描述
每当用户单击 recyclerview 中的项目时,我都不想调用将相应片段添加到 viewpager 的方法。我该怎么做??,下面是我的代码。谢谢
SemesterFragmentViewPager.java
public SemesterFragmentViewPager() {
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_semester,container,false);
viewPager2 = (ViewPager2) view.findViewById(R.id.viewPager2);
tabLayout = view.findViewById(R.id.tabLayout);
adapter = new MyViewPager(getChildFragmentManager(),this.getLifecycle());
viewPager2.setAdapter(adapter);
new TabLayoutMediator(tabLayout,viewPager2,new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab,int position) {
tab.setText("Sem" + (position + 1));
}
}).attach();
// addComputerScienceSem();
// cs();
adapter.notifyDataSetChanged();
return view;
}
public void addComputerScienceSem() {
adapter.addFrags(Semesters.newInstance(0,0));
adapter.addFrags(Semesters.newInstance(0,1));
adapter.addFrags(Semesters.newInstance(0,2));
adapter.addFrags(Semesters.newInstance(0,3));
}
public void cs(){
adapter.addFrags(Semesters.newInstance(0,4));
adapter.addFrags(Semesters.newInstance(0,5));
}
}
我想在下面实现的是,当 case 为 0 时,我应该调用 cs() method from SemesterFragmentViewPager.java
,但为什么不起作用
部门RVAdapter.java
public MyViewHolder(@NonNull View itemView) {
super(itemView);
imgDeplogo = itemView.findViewById(R.id.imgDeptlogo);
tvDepName = itemView.findViewById(R.id.tvDepName);
tvDepName.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickInterface.onItemClickListener(getLayoutPosition());
switch (getAdapterPosition()){
case 0:
Objects.requireNonNull(departmentFragment.getActivity()).getSupportFragmentManager()
.beginTransaction()
.replace(R.id.frameLayout,new SemesterFragmentViewPager().cs())// it Couldnt work
.addToBackStack(null).
commit();
break;
当 case 为 1 时,我应该调用 addComputerScienceSem() method from SemesterFragmentViewPager.java
,但不起作用
case 1:
Objects.requireNonNull(departmentFragment.getActivity()).getSupportFragmentManager()
.beginTransaction()
// .setCustomAnimations(R.anim.slide_in_left,R.anim.exit_to_left,R.anim.enter_from_right,R.anim.exit_to_left)
.replace(R.id.frameLayout,new SemesterFragmentViewPager().addComputerScienceSem())// it Couldnt work too
.addToBackStack(null).
commit();
break;
MyViewPager.java
public class MyViewPager extends FragmentStateAdapter {
List<Fragment> fragmentList = new ArrayList<>();
public MyViewPager(@NonNull FragmentManager fragmentManager,@NonNull Lifecycle lifecycle) {
super(fragmentManager,lifecycle);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
public void addFrags(Fragment fragment){
fragmentList.add(fragment);
}
}
解决方法
第 1 步:您应该创建回调(接口)
interface HandleClickItemsRecycleview{
void onclickItemRecycleView()
}
并设置为Adapter Recycleview Constructor
第 2 步:使用 SemesterFragmentViewPager 实现回调
SemesterFragmentViewPager implement HandleClickItemsRecycleview
功能覆盖
void onClickItemRecyleview(){
// Action Add Fragment To ViewPager.
}
关于上面recycleview item点击事件处理的响应 .希望对你有用