0

I whan to call a method that adds respective fragment to viewpager whenever user click on item from recyclerview. how can i do it??, below is my code. thanks

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));
    }
}

what i want to achieve below is that when ever the case is 0 then i should call cs() method from SemesterFragmentViewPager.java, but not working why

DepartmentRVAdapter.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;

and when the case is 1 then i should call addComputerScienceSem() method from SemesterFragmentViewPager.java, but not working

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);
    }
}
sir.p
  • 33
  • 6

1 Answers1

0

Step 1: You should create Callback (Interface)

interface HandleClickItemsRecycleview{
 void onclickItemRecycleView()
}

And set to Adapter Recycleview Constructor

Step 2: Implement Callback with SemesterFragmentViewPager

SemesterFragmentViewPager implement HandleClickItemsRecycleview

Function Overide

 void onClickItemRecyleview(){
// Action Add Fragment To ViewPager.
}

Concerning the response to the above recycleview item click event handling . Hope it is useful to you

LuongXuanNam
  • 67
  • 1
  • 4
  • it didnt work. How do i call `cs()` method when the user click on **item1** in the recyclerview, and also how can i call `addComputerScienceSem()` method when the user click on **item2** in the recyclerview??. Your code above worked but not in this way, `i want each method to be called in respect to their cases`. please help – sir.p May 08 '21 at 15:31