[英]How can I update recyclerview inside the adapter class of the same recyclerview?
I have a recyclerview.我有一个回收站。 I want to update the recycler view from its adapter class.
我想从其适配器类更新回收器视图。 I tried
notiftDataSetChanged( )
but it only works from the main class.我试过
notiftDataSetChanged( )
但它只能在主类中工作。 Below is the code for the recyclerview adapter class.下面是 recyclerview 适配器类的代码。
package com.library.apple.food;
import android.content.Context;
import android.content.Intent;
public class CartAdapter extends
RecyclerView.Adapter<CartAdapter.MyViewHolder> {
private Context context;
private List<CartItem> list;
private String auth_token;
private RecyclerView recyclerView;
public CartAdapter(Context context, List<CartItem> list, String
auth_token, RecyclerView recyclerView){
this.context = context;
this.list = list;
this.auth_token = auth_token;
this.recyclerView = recyclerView;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.row_cart,viewGroup,false);
CartAdapter.MyViewHolder myViewHolder = new
CartAdapter.MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder viewHolder,
final int i) {
final CartItem item = list.get(i);
viewHolder.title_cart.setText(item.getTitle_cart());
viewHolder.no_cart.setText(item.getNo_cart());
String price1 = context.getString(R.string.price,item.getPrice_cart());
viewHolder.price_cart.setText(price1);
String veg = item.getVegnon_cart();
if (veg.equalsIgnoreCase("false")) {
viewHolder.vegnon_cart.setImageResource(R.drawable.non_veg);
}
//-----------------------------------------------------------------------------
//cart plus button
viewHolder.btn_plus_cart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
String url_plus = "https://www.hungermela.com/api/v1/change-quantity/";
final String item_id = item.getCart_item_id();
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest postRequest = new StringRequest(Request.Method.POST, url_plus,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// response
Log.d("Response", response);
//HERE I WANT TO UPDATE MY RECYCLERVIEW
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", error.toString());
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Token "+auth_token);
return params;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("pk", item_id);
int quantity = Integer.parseInt(item.getNo_cart());
String quan = String.valueOf(quantity+1);
params.put("quantity",quan);
return params;
}
};
queue.add(postRequest);
}
});
//cart plus ends here
//-----------------------------------------------------------------------------
//cart minus button
viewHolder.btn_minus_cart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
int quantity = Integer.parseInt(item.getNo_cart());
if(quantity==1){
String url_minus = "https://www.hungermela.com/api/v1/delete-item/";
final String item_id = item.getCart_item_id();
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest postRequest = new StringRequest(Request.Method.POST, url_minus,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// response
Log.d("Response", response);
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new CartFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", error.toString());
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Token "+auth_token);
return params;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("pk", item.getId_id());
return params;
}
};
queue.add(postRequest);
}
else if(quantity > 1){
String url_minus = "https://www.hungermela.com/api/v1/change-quantity/";
final String item_id = item.getCart_item_id();
RequestQueue queue = Volley.newRequestQueue(context);
StringRequest postRequest = new StringRequest(Request.Method.POST, url_minus,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// response
Log.d("Response", response);
AppCompatActivity activity = (AppCompatActivity) view.getContext();
Fragment myFragment = new CartFragment();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit();
notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", error.toString());
}
}
) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("Authorization", "Token "+auth_token);
return params;
}
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("pk", item_id);
int quantity = Integer.parseInt(item.getNo_cart());
String quan = String.valueOf(quantity-1);
params.put("quantity",quan);
return params;
}
};
queue.add(postRequest);
}
}
});
//cart minus ends here
//-----------------------------------------------------------------------------
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title_cart, no_cart, price_cart;
ImageView vegnon_cart;
Button btn_minus_cart, btn_plus_cart;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
vegnon_cart = (ImageView)itemView.findViewById(R.id.vegnon_cart);
title_cart = (TextView)itemView.findViewById(R.id.title_cart);
no_cart = (TextView)itemView.findViewById(R.id.no_cart);
price_cart = (TextView)itemView.findViewById(R.id.price_cart);
//Button
btn_minus_cart = (Button) itemView.findViewById(R.id.btn_minus_cart);
btn_plus_cart = (Button) itemView.findViewById(R.id.btn_plus_cart);
}
@Override
public void onClick(View view) {
}
}
}
I have tried using notiftDataSetChanged( ) but it didn't work.我曾尝试使用 notiftDataSetChanged() 但它没有用。 It didn't updates the recyclerview at runtime.
它没有在运行时更新 recyclerview。 I have to again refresh the page.
我必须再次刷新页面。 I want to update the recyclerview just after the plus button in my recyclerview row is clicked.
我想在单击我的 recyclerview 行中的加号按钮后更新 recyclerview。
The problem is probably you didn't update carditem list when you click plus or minus button.For example,问题可能是您单击加号或减号按钮时没有更新carditem列表。例如,
final CartItem item = list.get(i);
viewHolder.btn_plus_cart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
int count = item.getNo_cart()+1; //may be you can use response from network
item.setNo_cart(count); //update item
notifyDataSetChanged();
}
}
You need to update carditem object with new data before calling notifyDataSetChanged()在调用 notifyDataSetChanged() 之前,您需要使用新数据更新 carditem 对象
You can make something like that你可以做这样的事情
public void updateData( List<CartItem> newData)
{
list.clear();
list.addAll(newData);
this.notiftDataSetChanged( );
}
Or use set
function to update only one item或者使用
set
函数只更新一项
public void updateOnlyOneItem(CartItem newItem,int position){
this.list.set(position, newItem);
this.notifyItemChanged();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.