Cody Weisenberger
- Forum posts: 1
Apr 25, 2016, 6:25:32 AM via Website
Apr 25, 2016 6:25:32 AM via Website
I am creating a little social network application. I am trying to have a user post something, then be able to like statuses. Currently, if a user likes a status, twoproblems are occurring:
1: When a like button is pressed, it also likes the 'recycled view' button down the list and changes the text of the button on both to unlike, but not like count. ( If user likes the second post in the list, it will also change the text to unlike of other button down the list)
2: The button text will not stay as 'unlike' if the screen is changed.
Here is the custom adapter:
public class PostsAdapter extends ArrayAdapter<Posts> {
//used to create views from xml
Context context;
int textViewResourceId;
ArrayList<Posts> mPosts = new ArrayList<Posts>();
public PostsAdapter(Context context, int textViewResourceId, ArrayList<Posts> posts) {
super(context, textViewResourceId, posts);
this.textViewResourceId = textViewResourceId;
this.context = context;
this.mPosts = posts;
}
// view convertview = recycled view
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
final Holder holder;
//checks if recycled view is null, thewn creates new view, if not null, use same view
if(view == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
view = inflater.inflate(textViewResourceId, parent, false);
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);
holder.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createLike(position, holder.like, holder.hiddenId, holder.likes);//Added one more parameter "position"
}
});
view.setTag(holder);
}
else{
holder = (Holder) view.getTag();
}
Posts posts = mPosts.get(position);
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());
return view;
}
private void createLike(final int position, final Button like, final TextView hiddenid, final TextView likes){
final String hid = hiddenid.getText().toString().trim();
if(like.getText().toString().equalsIgnoreCase("like")){
System.out.println("MPOOSTSPOSITION: "+mPosts.get(position));
mPosts.get(position);
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 {
//counter
n+=1;
//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
String likestring = getLikeCount(result2);
String likenum = mPosts.get(position).getLikes(likestring);
likes.setText(likenum);
mPosts.get(position).setLikes(likenum);
} 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(DisplayPosts.this);
requestQueue.add(stringRequest);
}
else{
like.setText("Like");
//mPosts.get(position);
}
}
private String getLikeCount(JSONArray jsonArray){
System.out.println("JSON: " + jsonArray);
String lc = null;
for(int i = 0; i < jsonArray.length(); i++) {
try {
JSONObject json = jsonArray.getJSONObject(i);
likeCount.add(json.getString(Config.getLike));
System.out.println("i: " + i);
lc = likeCount.get(n - 1);
} catch (JSONException e) {
}
}
System.out.println("LC: " + lc);
return lc;
}
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;
}
}
}
I would really appreciate any help!
Recommended editorial content
With your consent, external content is loaded here.
By clicking on the button above, you agree that external content may be displayed to you. Personal data may be transmitted to third-party providers in the process. You can find more information about this in our Privacy Policy.