У меня есть небольшая проблема, которая сводит меня с ума
Поэтому я пытаюсь создать небольшое приложение для социальных сетей на Android.
В моем основном фрагменте у меня есть RecyclerView, который содержит сообщения (это похоже на ленту новостей)
И в каждом элементе есть кнопка «Мне нравится» и «Кнопка комментария», в viewAdapter рециркулятора в функции onBindViewHolder я использую запрос залпа, чтобы получить все сообщения, которые понравились пользователю, и каждый раз, когда я ловлю одну, я устанавливаю цвет текста Like textView (J). 'aime по-французски) синим цветом, как на изображении ниже.
![Main fragment with the like buttons in blue](https://i.stack.imgur.com/YYPcW.png)
И если я нажимаю на другую кнопку «Нравится», она становится синей, и подобное добавляется в базу данных, но проблема в том, что когда я хочу удалить ее, когда я нажимаю снова, она не работает в адаптере утилизатора. Я проверяю с условием IF, если textview - синий, если это не так, я устанавливаю цвет по умолчанию и удаляю подобное из базы данных, вот код адаптера.
package com.example.salim.projet.model;
import android.content.Context;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;
import com.example.salim.projet.R;
import com.example.salim.projet.fragments.HomeFragment;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Created by salim on 24/04/18.
*/
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
int clickedPosition = -1;
String send_url = "http://10.0.3.2/sendlike.php";
String drop_url = "http://10.0.3.2/droplike.php";
String email;
ArrayList<Likes> arrayLikes = new ArrayList<>();
ArrayList<Publication> arrayList = new ArrayList<>();
public RecyclerAdapter(ArrayList<Publication> arrayList, String email)
{
this.arrayList = arrayList;
this.email = email;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_row, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Context context;
String likes_url = "http://10.0.3.2/likes.php?email="+email;
holder.Nom.setText(arrayList.get(position).getNom());
holder.Prenom.setText(arrayList.get(position).getPrenom());
holder.Contenu.setText(arrayList.get(position).getContenu());
holder.Date.setText(arrayList.get(position).getDate());
holder.Like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clickedPosition = position;
notifyDataSetChanged();
}
});
// RECUPERATION LIKES
// HERE IS WHERE I CATCH ALL THE POSTS THAT THE USER LIKED FROM DATABASE ON A JSON
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, likes_url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
int count = 0;
while (count < response.length())
{
try {
JSONObject jsonObject = response.getJSONObject(count);
Likes like = new Likes(jsonObject.getInt("ID"), jsonObject.getInt("LikeUser"), jsonObject.getInt("PostLiked"));
arrayLikes.add(like);
count++;
} catch (JSONException e) {
e.printStackTrace();
}
}
if (!arrayLikes.isEmpty())
{
int i;
for (i = 0; i < arrayLikes.size(); i++)
{
if (arrayLikes.get(i).getPost_id() == arrayList.get(position).getId()) {
holder.Like.setTextColor(ContextCompat.getColor(holder.Like.getContext(), R.color.startblue));
}
}
}
// Log.i("DEBUG", " Position item : " + position + " Position du I : " + i + " ArrayLike Post ID : "+ arrayLikes.get(position).getPost_id() + " == Publication ID : " + arrayList.get(position).getId());
// if (arrayLikes.get(position).getPost_id() == arrayList.get(position).getId()) {
// holder.Like.setTextColor(ContextCompat.getColor(holder.Like.getContext(), R.color.startblue));
// }
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
Mysingleton.getInstance(holder.Like.getContext()).addToRequestQueue(jsonArrayRequest);
// FIN RECUP LISTE LIKES
// HERE IS WHERE I HANDLE THE CLICKS ON THE LIKE BUTTON
if(clickedPosition == position) {
if (holder.Like.getCurrentTextColor() == (ContextCompat.getColor(holder.Like.getContext(), R.color.startblue)))
{
holder.Like.setTextColor(ContextCompat.getColor(holder.Like.getContext(), R.color.defaultt));
StringRequest stringRequest = new StringRequest(Request.Method.POST, drop_url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String,String>();
params.put("email", email);
params.put("postid", String.valueOf(arrayList.get(position).getId()));
return params;
}
};
Mysingleton.getInstance(holder.Like.getContext()).addToRequestQueue(stringRequest);
}
else
{
holder.Like.setTextColor(ContextCompat.getColor(holder.Like.getContext(), R.color.startblue));
StringRequest stringRequest = new StringRequest(Request.Method.POST, send_url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<String,String>();
params.put("email", email);
params.put("postid", String.valueOf(arrayList.get(position).getId()));
return params;
}
};
Mysingleton.getInstance(holder.Like.getContext()).addToRequestQueue(stringRequest);
}
}
}
@Override
public int getItemCount() {
return arrayList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder
{
TextView Nom, Prenom, Contenu, Date, Like;
public MyViewHolder(View itemView) {
super(itemView);
Nom = (TextView) itemView.findViewById(R.id.name);
Prenom = (TextView) itemView.findViewById(R.id.surName);
Contenu = (TextView) itemView.findViewById(R.id.feedText);
Date = (TextView) itemView.findViewById(R.id.date);
Like = (TextView) itemView.findViewById(R.id.likeView);
}
}
}
Все, что происходит в OnBindViewHolder, надеюсь, мой вопрос был ясен, если я могу добавить что-нибудь еще, просто скажите мне и спасибо!
Возможно, этот вопрос может показаться вам слабым, но я не профессионал, и я потратил более 2 дней, пытаясь это исправить, и каждый раз, когда я сталкиваюсь с другой проблемой.