Asesha George
Asesha George

Reputation: 2268

On Click Recycler view pass data to same Fragment

I am trying to Load data to a Recycler view. I have Fragment A with Recycler View and back button, My Fragment contains Group of users List. When I click on one User Card it should open the same fragment with different set of data. Hear I am capturing User_id and pass it to same Fragment, based on that User id my fragment will load data, but when I click back its should go to previous set of data. Below is my code

My Adapter

public class DirectLeftTeamAdapter extends RecyclerView.Adapter<DirectLeftTeamAdapter.MyViewHolder> {

    Context context;
    ArrayList<TeamModal> teamList;
    onItemClickListner onItemClickListner;

    public DirectLeftTeamAdapter(Context context, ArrayList<TeamModal> teamList) {
        this.context=context;
        this.teamList=teamList;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.leftteamcard,parent,false);

        return new MyViewHolder(view,context,teamList);
    }

    public void setOnItemClickListner(DirectLeftTeamAdapter.onItemClickListner onItemClickListner) {
        this.onItemClickListner = onItemClickListner;
    }

    public interface onItemClickListner{
        void onClick(String str);//pass your object types.
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        final TeamModal teamModal= teamList.get(position);

        holder.memname.setText(teamModal.getName());
        holder.memjoining.setText("Doj: "+teamModal.getDoj());
        holder.earnings.setText("Earnings: $"+(teamModal.getEarnings()));
        holder.totalmemcount.setText("Team: "+(teamModal.getTeamcount()));

        String Membertype;

        if(teamModal.getMembertype().equals("1")){
            Membertype="Product";
            holder.memcard.setCardBackgroundColor(Color.parseColor("#00FF7F"));
        }else{
            Membertype="Free Member";
            holder.memcard.setCardBackgroundColor(Color.parseColor("#FFB6C1"));
        }

        holder.memtype.setText("Member: "+Membertype);
        holder.memrank.setText("Rank: "+teamModal.getRank());
        holder.phonenumber.setText("Mobile: "+teamModal.getPhone());
        holder.userid.setText("User ID:"+teamModal.getUserid());
    }



    @Override
    public int getItemCount() {
        return teamList.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        Context context;
        ArrayList<TeamModal> teamList;


        TextView memname,memjoining,totalmemcount,memtype,memrank,phonenumber,earnings,userid;
        CardView memcard;
        public MyViewHolder(@NonNull View itemView, Context context, ArrayList<TeamModal> teamList) {
            super(itemView);

            this.context=context;
            this.teamList=teamList;
            itemView.setOnClickListener(this);

            memname= itemView.findViewById(R.id.memerbame);
            memjoining= itemView.findViewById(R.id.dateofjoining);
            totalmemcount= itemView.findViewById(R.id.teamcount);
            memtype= itemView.findViewById(R.id.membertype);
            memrank= itemView.findViewById(R.id.memrank);
            phonenumber=itemView.findViewById(R.id.phone_number);
            earnings=itemView.findViewById(R.id.totalearnings);
            userid=itemView.findViewById(R.id.teamuserid);
            memcard=itemView.findViewById(R.id.membercard);
        }

        @Override
        public void onClick(View v) {
            int pos = getAdapterPosition();
            TeamModal teamModal =this.teamList.get(pos);

                onItemClickListner.onClick(teamModal.getUserid());


      }
    }
}

and my Fragment

public class DirectTeamLeftFragment extends Fragment {

    DirectLeftTeamAdapter directLeftTeamAdapter;
    ArrayList<TeamModal> LeftTeamList;
    RecyclerView recyclerView;
    GridLayoutManager mlayoutmanager;

    Session session;
    Apiinterface apiinterface;
    String Userid,Token;
    Button backbtn,loadmorebtn;

    String nuserid="111";


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View root=inflater.inflate(R.layout.fragment_direct_team_left, container, false);


        recyclerView = root.findViewById(R.id.directleftteam);
        session=new Session(getContext());

        Userid=session.getUserDetails().get(Session.KEY_USERID);
        Token = session.gettoken().get(Session.KEY_TOKEN);
        backbtn = root.findViewById(R.id.backbutton);
        loadmorebtn=root.findViewById(R.id.loadmorebtn);

        nuserid = getArguments().getString("nuserid");


        LeftTeamList = new ArrayList<TeamModal>();
        directLeftTeamAdapter = new DirectLeftTeamAdapter(getContext(),LeftTeamList);

        mlayoutmanager= new GridLayoutManager(getContext(),1);
        recyclerView.setLayoutManager(mlayoutmanager);
        recyclerView.addItemDecoration(new DirectTeamLeftFragment.GridSpacingItemDecoration(1, dpToPx(10), true));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(directLeftTeamAdapter);
        directLeftTeamAdapter.setOnItemClickListner(new DirectLeftTeamAdapter.onItemClickListner() {
            @Override
            public void onClick(String newuserid) {
               // Toast.makeText(getContext(), newuserid, Toast.LENGTH_LONG).show();

               // LeftTeamList.clear();
//                directLeftTeamAdapter.notifyDataSetChanged();

               // getLeftDirectTeamList(Userid,Token,newuserid);
                DirectTeamLeftFragment directTeamLeftFragment = new DirectTeamLeftFragment();

                Bundle bundle = new Bundle();
                bundle.putString("nuserid",newuserid);
                directTeamLeftFragment.setArguments(bundle);
                getActivity().getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.content_frame,directTeamLeftFragment)
                        .commit();
            }
        });


//        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
//            @Override
//            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
//                super.onScrollStateChanged(recyclerView, newState);
//
//                if(!recyclerView.canScrollVertically(1) && newState==RecyclerView.SCROLL_STATE_IDLE){
//                    Toast.makeText(getContext(), "Last", Toast.LENGTH_SHORT).show();
//
//                }
//            }
//        });


        getLeftDirectTeamList(Userid, Token, nuserid);

        backbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //getChildFragmentManager().popBackStack();
                getActivity().getFragmentManager().popBackStack();
            }

        });


        return root;
    }




    private void getLeftDirectTeamList(String userid, String token, String newuserid) {


        final KProgressHUD progressDialog = KProgressHUD.create(requireContext())
                .setStyle(KProgressHUD.Style.SPIN_INDETERMINATE)
                .setLabel("Please wait")
                .setCancellable(false)
                .setAnimationSpeed(2)
                .setDimAmount(0.5f)
                .show();

        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("userid",userid);
        jsonObject.addProperty("token",token);
        jsonObject.addProperty("newuserid",newuserid);

        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(2, TimeUnit.MINUTES)
                .writeTimeout(2, TimeUnit.MINUTES)
                .readTimeout(2, TimeUnit.MINUTES)
                .addInterceptor(loggingInterceptor)
                .build();


        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Settings.REG_SERVER_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient).build();

        apiinterface = retrofit.create(Apiinterface.class);

        Call<ArrayList<TeamModal>> call = apiinterface.performgetTeam(jsonObject);
        call.enqueue(new Callback<ArrayList<TeamModal>>() {
            @Override
            public void onResponse(@NotNull Call<ArrayList<TeamModal>> call, @NotNull Response<ArrayList<TeamModal>> response) {
                progressDialog.dismiss();
                if(response.body()!=null){
                    ArrayList<TeamModal> teamModals = response.body();

                    for(TeamModal tmlist: teamModals){

                        TeamModal teamModal = new TeamModal(tmlist.getName(),
                                tmlist.getUserid(),tmlist.getPhone(),tmlist.getSponsor(),tmlist.getDoj(),tmlist.getRank(),
                                tmlist.getMembertype(),tmlist.getEarnings(),tmlist.getTeamcount());

                        LeftTeamList.add(teamModal);
                    }
                    directLeftTeamAdapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onFailure(@NotNull Call<ArrayList<TeamModal>> call, Throwable t) {
                progressDialog.dismiss();
                Toast.makeText(getContext(),"Not Found", Toast.LENGTH_SHORT).show();
            }
        });
    }

    public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

        private int spanCount;
        private int spacing;
        private boolean includeEdge;

        public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
            this.spanCount = spanCount;
            this.spacing = spacing;
            this.includeEdge = includeEdge;
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int position = parent.getChildAdapterPosition(view); // item position
            int column = position % spanCount; // item column

            if (includeEdge) {
                outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
                outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

                if (position < spanCount) { // top edge
                    outRect.top = spacing;
                }
                outRect.bottom = spacing; // item bottom
            } else {
                outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
                outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
                if (position >= spanCount) {
                    outRect.top = spacing; // item top
                }
            }
        }
    }

    /**
     * Converting dp to pixel
     */
    private int dpToPx(int dp) {
        Resources r = getResources();
        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
    }

    @Override
    public void onDetach() {
        super.onDetach();
        getLeftDirectTeamList(Userid, Token,nuserid);
    }


}

for better understand please see below image. on this image when I click on fist card it should load child data of first card and go on. when I click back it should come back to previous view

enter image description here

I hope you understand, if you need any clarification please comment

Upvotes: 1

Views: 171

Answers (1)

Manikandan
Manikandan

Reputation: 130

instead replace the fragment just call network call with userid ..and maintain arraylist for clicked userid ..once click back button load data by calling network ..and delete userid from list

Upvotes: 1

Related Questions