java如何在对arraylist执行某些操作后更新它而不重新启动活动
我有一个适配器。将arraylist附加到RecyclerView的java类
但问题是我想更新列表,而不想再次启动活动
我怎样才能做到这一点
这是我的代码,在接受操作之后,列表中的项目也应该更新
import 安卓.content.Context;
import 安卓.util.Log;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.Button;
import 安卓.widget.ImageView;
import 安卓.widget.TextView;
import 安卓.widget.Toast;
import 安卓x.annotation.NonNull;
import 安卓x.recyclerview.widget.RecyclerView;
import com.安卓.volley.AuthFailureError;
import com.安卓.volley.Request;
import com.安卓.volley.RequestQueue;
import com.安卓.volley.Response;
import com.安卓.volley.VolleyError;
import com.安卓.volley.toolbox.StringRequest;
import com.安卓.volley.toolbox.Volley;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class RequestAdapter extends RecyclerView.Adapter<RequestAdapter.ViewHolder> {
LayoutInflater inflater;
List<UserRequests> userRequest;
Context ctx;
public RequestAdapter(Context ctx, List<UserRequests> userRequest) {
this.ctx=ctx;
this.inflater = LayoutInflater.from(ctx);
this.userRequest = userRequest;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.request_list_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final UserRequests ureq=userRequest.get(position);
holder.usrname.setText(userRequest.get(position).getUsername());
holder.pickup.setText(userRequest.get(position).getPickupaddress());
holder.drop.setText(userRequest.get(position).getDropaddress());
Picasso.get().load(userRequest.get(position).getImage()).into(holder.usrpic);//next here
holder.accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(ctx,"This is accept button"+String.valueOf(ureq.getId()),Toast.LENGTH_SHORT).show();
Log.d("id of transaction", String.valueOf(ureq.getId()));
accept(ureq.getId());
// I want to add something here which will update the list
}
});
}
private void accept(int id) {
RequestQueue queue= Volley.newRequestQueue(ctx);
StringRequest stringRequest=new StringRequest(Request.Method.POST, "xxxxxx", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(response.equals("accepted")){
Log.d("accepted","1 true");
Toast.makeText(ctx,"Accepted",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(ctx,response,Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(ctx,error.getMessage(),Toast.LENGTH_SHORT).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params=new HashMap<String, String>();
params.put("rid", String.valueOf(id));
return params;
}
}; RequestQueue requestQueue= Volley.newRequestQueue(ctx);
requestQueue.add(stringRequest);
}
@Override
public int getItemCount() {
return userRequest.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView usrname,pickup,drop;
ImageView usrpic;
Button accept,reject;
public ViewHolder(@NonNull View itemView) {
super(itemView);
usrname=itemView.findViewById(R.id.R_L_tvusername);
pickup=itemView.findViewById(R.id.R_L_tvpckpadd);
drop=itemView.findViewById(R.id.R_L_tvdropadd);
usrpic=itemView.findViewById(R.id.R_L_iv_display_image);
accept=itemView.findViewById(R.id.imageView4);
reject=itemView.findViewById(R.id.imageView5);
}
}
}
主活动代码如下所示
import 安卓x.appcompat.app.AppCompatActivity;
import 安卓x.recyclerview.widget.LinearLayoutManager;
import 安卓x.recyclerview.widget.RecyclerView;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.widget.Toast;
import com.安卓.volley.AuthFailureError;
import com.安卓.volley.Request;
import com.安卓.volley.RequestQueue;
import com.安卓.volley.Response;
import com.安卓.volley.VolleyError;
import com.安卓.volley.toolbox.JsonArrayRequest;
import com.安卓.volley.toolbox.StringRequest;
import com.安卓.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ViewRequests extends AppCompatActivity {
RecyclerView recyclerView;
List<UserRequests> Requests;
RequestAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_requests);
recyclerView = findViewById(R.id.requestlist);
Requests = new ArrayList<>();
extractRequest();
}
private void extractRequest() {
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest jsonArrayRequest = new StringRequest(Request.Method.POST, "xxxxxx", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject requestobject = new JSONObject(response);
String success = requestobject.getString("success");
Log.d("Json success", success.toString());
JSONArray jsonArray = requestobject.getJSONArray("data");
Log.d("Json data", jsonArray.toString());
if (success.equals("1")) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
Log.d("Json data" + i + ": ", jsonArray.getJSONObject(i).toString());
UserRequests userRequests = new UserRequests();
userRequests.setUsername(object.getString("username").toString());
userRequests.setPickupaddress("Pickup address:" + object.getString("pickupaddress").toString());
userRequests.setDropaddress("Drop address:" + object.getString("dropaddress").toString());
userRequests.setImage(object.getString("photo").toString());
userRequests.setId(Integer.parseInt(object.getString("r_id").toString()));
Requests.add(userRequests);
}
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
adapter = new RequestAdapter(getApplicationContext(), Requests);
recyclerView.setAdapter(adapter);
}
// Requests.add(userRequests);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Volley Error:", error.getMessage());
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String, String>();
params.put("user_id", "1");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(ViewRequests.this);
requestQueue.add(jsonArrayRequest);
}
}
用户请求。爪哇
public class UserRequests {
private String username;
private String pickupaddress;
private String dropaddress;
private String image;
private int id;
public UserRequests() {
}
public UserRequests(String username, String pickupaddress, String dropaddress, String image, int id) {
this.username = username;
this.pickupaddress = pickupaddress;
this.dropaddress = dropaddress;
this.image = image;
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPickupaddress() {
return pickupaddress;
}
public void setPickupaddress(String pickupaddress) {
this.pickupaddress = pickupaddress;
}
public String getDropaddress() {
return dropaddress;
}
public void setDropaddress(String dropaddress) {
this.dropaddress = dropaddress;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
# 1 楼答案
加上 适配器。notifyDataSetChanged()
# 2 楼答案
当服务器成功响应时,您必须在本地更新/维护
只需在UserRequests中创建一个变量,并在成功响应来自API且在UI中设置时更新该变量
示例代码:
用户请求
请求适配器:
注意:可能有一些语法错误,请更正
# 3 楼答案
更改arraylist后。告诉适配器数据已更改
要从活动中访问列表,请在请求适配器中使其公开
然后,在“活动”中,访问您的列表。和对其进行一些更改并通知适配器
或者如果要从适配器类调用提取数据方法
在请求适配器中声明活动变量
在活动中。分配
将extractRequest()公开
输入适配器