Ich verwende eine Listenansicht und einen benutzerdefinierten Adapter erstellen. Ich versuche jedes Mal, wenn der Button angeklickt wird, einen Post zu mögen. Der deklarierte Button ist mit jedem Eintrag in der Listenansicht verbunden. Es gibt drei Probleme, denen ich begegne:Problem mit Variablen von meinem benutzerdefinierten Adapter
1) Wenn ich auf die gleiche Schaltfläche klicke, wird auch eine "zufällige" Schaltfläche in der Liste angeklickt.
2) Wenn ich auf "Gefällt mir" klicke, wird die Anzahl der gleichwertigen Dateien aktualisiert, aber wenn ich nicht mehr in der Ansicht blättern kann, scrolle ich zurück, die entsprechende Anzahl wird zurückgesetzt.
3) Wenn ich auf "Gefällt mir" klicke, ändert sich die Anzahl der Klicks. Wenn ich jetzt auf einen anderen Beitrag klicke, ändert sich die Zählung wie auf der ersten Schaltfläche, auf die ich geklickt habe.
Ich habe auf dieser für eine Weile fest, jede Hilfe wird sehr geschätzt. Hier
ist der Code für Adapterklasse:
class PostsAdapter extends ArrayAdapter<Posts> implements View.OnClickListener {
//used to create views from xml
private LayoutInflater layoutInflater;
public PostsAdapter(Context context, int textViewResourceId, List<Posts> posts) {
super(context, textViewResourceId, posts);
layoutInflater = LayoutInflater.from(context);
}
//add to xml from dataset
@Override
// view convertview = recycled view
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
Holder holder = null;
Posts posts = getItem(position);
//checks if recycled view is null, thewn creates new view, if not null, use same view
if(view == null){
view = layoutInflater.inflate(R.layout.activity_posts, null);
Button like = (Button) view.findViewById(R.id.btnLike);
TextView content = (TextView) view.findViewById(R.id.content);
TextView user = (TextView) view.findViewById(R.id.user);
TextView topic = (TextView) view.findViewById(R.id.topic);
TextView date = (TextView) view.findViewById(R.id.date);
TextView likes = (TextView) view.findViewById(R.id.likeCount);
TextView hiddenId = (TextView) view.findViewById(R.id.hiddenID);
holder = new Holder(content, user, topic, date, likes, hiddenId, like);
view.setTag(holder);
like.setTag(holder);
}
else{
holder = (Holder) view.getTag();
}
holder.content.setText(posts.getContent());
holder.user.setText(posts.getUser());
holder.topic.setText(posts.getTopic());
holder.date.setText(posts.getDate());
holder.likes.setText(posts.getLikes());
holder.hiddenId.setText(posts.getId());
holder.like.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
Button like = (Button) v;
Holder holder = (Holder) v.getTag();
Toast.makeText(DisplayPosts.this, "Button: " + like.getText(), Toast.LENGTH_LONG).show();
createLike(holder.like, holder.hiddenId, holder.likes);
}
}
static class Holder{
public TextView content;
public TextView user;
public TextView topic;
public TextView date;
public TextView likes;
public TextView hiddenId;
public Button like;
public Holder(TextView content, TextView user, TextView topic, TextView date, TextView likes, TextView hiddenId, Button like) {
this.content = content;
this.user = user;
this.topic = topic;
this.date = date;
this.likes = likes;
this.hiddenId = hiddenId;
this.like = like;
}
}
Hier ist createLike Methode:
private void createLike(final Button like, final TextView hiddenid, final TextView likes){
final String hid = hiddenid.getText().toString().trim();
if(like.getText().toString().equalsIgnoreCase("like")){
like.setText("UnLike");
StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.SERVER_ADDRESS + "LikePost.php",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
//json string to jsonobject
jsonObject = new JSONObject(response);
//get json sstring created in php and store to JSON Array
result2 = jsonObject.getJSONArray(Config.json_array_likes);
//get username from json array
likes.setText(getLikeCount(result2));
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// corresponding values.
Map<String,String> hashMap = new HashMap<>();
//maps specified string key, to specified string value
hashMap.put(Config.hid, hid);
return hashMap;
}
};
//add string request to queue
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
else{
like.setText("Like");
}
}
private String getLikeCount(JSONArray jsonArray){
String lc = null;
for(int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject json = jsonArray.getJSONObject(i);
likeCount.add(json.getString(Config.getLike));
lc = likeCount.get(0);
} catch (JSONException e) {
}
}
return lc;
}
Haben das Problem nicht beheben. Trotzdem danke! – cdub