简体   繁体   English

单击回收器视图将数据传递到相同的片段

[英]On Click Recycler view pass data to same Fragment

I am trying to Load data to a Recycler view.我正在尝试将数据加载到 Recycler 视图。 I have Fragment A with Recycler View and back button, My Fragment contains Group of users List.我有带有回收站视图和后退按钮的片段 A,我的片段包含用户组列表。 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.听说我正在捕获User_id并将其传递给相同的 Fragment,基于该用户 ID,我的片段将加载数据,但是当我单击返回时,它应该 go 到前一组数据。 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.在这张图片上,当我点击第一张卡片时,它应该加载第一张卡片和 go 的子数据。 when I click back it should come back to previous view当我单击返回时,它应该返回到以前的视图

在此处输入图像描述

I hope you understand, if you need any clarification please comment希望您能理解,如果您需要任何澄清,请发表评论

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而是用用户ID替换片段只是调用网络调用..并维护arraylist单击用户ID..单击后退按钮通过调用网络加载数据..并从列表中删除用户ID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM