Reputation: 2268
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
I hope you understand, if you need any clarification please comment
Upvotes: 1
Views: 171
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