android - 如何在 recyclerview 适配器中使用 volley 发布数据
问题描述
我正在寻找一种最简单的方法来在每次单击按钮时发布注释。我使用适配器和回收器视图。我的代码如下。
适配器
''' 公共类 CriteriaAdapter 扩展 RecyclerView.Adapter<CriteriaAdapter.RecyclerVH> {
private List<criteria_services> criteria;
LayoutInflater inflater;
public CriteriaAdapter(List<criteria_services> criteria, Context ctx) {
this.inflater = LayoutInflater.from(ctx);
this.criteria = criteria;
}
@NonNull
@Override
public RecyclerVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = inflater.inflate(R.layout.model_list_criteria, parent, false);
return new RecyclerVH(v) {
};
}
@Override
public void onBindViewHolder(@NonNull RecyclerVH holder, int position) {
holder.criteriaName.setText(criteria.get(position).getName());
}
@Override
public int getItemCount() {
return criteria.size();
}
@Override
public int getItemViewType(int position){
return position;
}
public abstract class RecyclerVH extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView btn1, btn2, btn3, btn5, btn6;
TextView criteriaName;
int note = 0 ;
String URL_post = "http://10.0.2.2:80/rankit_api/post_note.php";
public RecyclerVH(View itemView) {
super(itemView);
criteriaName = itemView.findViewById(R.id.criteria_name);
itemView.setOnClickListener(this);
btn1 = itemView.findViewById(R.id.btn1);
btn2 = itemView.findViewById(R.id.btn2);
btn3 = itemView.findViewById(R.id.btn3);
btn5 = itemView.findViewById(R.id.btn5);
btn6 = itemView.findViewById(R.id.btn6);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
note = +3;
String value = String.valueOf(note);
Toast.makeText(v.getContext(), R.string.excellent , Toast.LENGTH_SHORT).show();
btn1.setImageResource(R.drawable.un_excellent);
//Sender s=new Sender(CriteriaAdapter.this,URL_post,note);
//s.execute();
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
note = +2;
String value = String.valueOf(note);
Toast.makeText(v.getContext(), R.string.very_good , Toast.LENGTH_SHORT).show();
btn2.setImageResource(R.drawable.un_very_good);
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
note = +1;
String value = String.valueOf(note);
Toast.makeText(v.getContext(), R.string.good , Toast.LENGTH_SHORT).show();
btn3.setImageResource(R.drawable.un_good);
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
note = -1;
String value = String.valueOf(note);
Toast.makeText(v.getContext(), R.string.bad , Toast.LENGTH_SHORT).show();
btn5.setImageResource(R.drawable.un_bad);
}
});
btn6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
note = -2;
String value = String.valueOf(note);
Toast.makeText(v.getContext(), R.string.very_bad , Toast.LENGTH_SHORT).show();
btn6.setImageResource(R.drawable.un_very_bad);
}
});
}
@Override
public void onClick(View v) {
//
}
}}
'''
** 活动 **
''' 公共类 Activity_criteria 扩展 AppCompatActivity {
RecyclerView rv;
List<criteria_services> criterias;
RequestQueue requestQueue;
ProgressDialog progressDialog;
private static String URL = "http://10.0.2.2:80/rankit_api/criterialist.php";
private static String URL_post = "http://10.0.2.2:80/rankit_api/post_note.php";
private Button send;
private String note;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_criteria);
requestQueue = Volley.newRequestQueue(Activity_criteria.this);
progressDialog = new ProgressDialog(Activity_criteria.this);
rv = findViewById(R.id.card_criteria_serv);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(this));
criterias = new ArrayList<>();
loadCriteria();
send = findViewById(R.id.button_send);
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Well done, thank you !", Toast.LENGTH_SHORT).show();
//Sender s=new Sender(Activity_criteria.this,URL_post,note);
//Postnote();
}
});
}
private void loadCriteria() {
StringRequest stringRequest = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray array = new JSONArray(response);
for (int i = 0; i < array.length(); i++) {
JSONObject criteria = array.getJSONObject(i);
criterias.add(new criteria_services(
criteria.getString("criteria_name")
));
}
CriteriaAdapter adapter = new CriteriaAdapter(criterias, Activity_criteria.this);
rv.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
Volley.newRequestQueue(this).add(stringRequest);
}
'''
解决方案
推荐阅读
- python - 如何缩短代码以生成熊猫数据框?
- java - 没有数组的java随机数生成器
- node.js - socket.io leave current room and join after button is clicked
- java - org.hibernate.MappingException:属性映射在 ENUM 实体中有错误的列数
- algorithm - Longest Substring with no Y Divide and Conquer
- javascript - 确保以前未在注册表中使用过电子邮件
- elasticsearch - 如何在 ElasticSearch 中对单个字段应用完全匹配并在多个字段上同时应用不同?
- sql-server - SQL Server : trying to insert a count of zero when a record doesn't exist
- openlayers - 带圆角的矩形作为特征样式
- git - 持续集成期间不能泄露秘密