I have a listview
with a base adapter , whose filling comes from a webservice , I occupy the library LikeButton to animate the" like "button that works correctly, if the problem is that when you go through the listview
to see the options, and After returning, the like is unchecked and vice versa, I leave my code:
public class ImagenAdapter extends BaseAdapter implements Filterable{
Context ctx;
LayoutInflater layoutInflater;
ArrayList<FilterData>Datos;
CustomFilter filtro;
ArrayList<FilterData>filtroList;
public ImagenAdapter(Context applicationContext, ArrayList<FilterData>Datos){
this.ctx=applicationContext;
this.Datos = Datos;
this.filtroList = Datos;
layoutInflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return Datos.size();
}
@Override
public Object getItem(int i) {
return Datos.get(i);
}
@Override
public long getItemId(int i) {
return Datos.indexOf(getItem(i));
}
public class ViewHolder{
LikeButton likeButton;
ImageView smartImageView;
TextView tvNombre, tvDescripcion, tvDistancia;
}
@Override
public View getView(final int i, final View view, final ViewGroup parent) {
final ViewHolder holder;
ViewGroup viewGroup1 = null;
if (viewGroup1 == null) {
viewGroup1 = (ViewGroup) layoutInflater.inflate(R.layout.fila_lista, null);
holder = new ViewHolder();
holder.smartImageView = (ImageView) viewGroup1.findViewById(R.id.imagenFondoLista);
holder.tvNombre = (TextView) viewGroup1.findViewById(R.id.nombre_fila_lista);
holder.tvDescripcion = (TextView) viewGroup1.findViewById(R.id.desc);
holder.tvDistancia = (TextView) viewGroup1.findViewById(R.id.dist);
holder.likeButton = (LikeButton) viewGroup1.findViewById(R.id.btnLikeStar);
final String urlFinal = "http://www.ws.com.mx/images/lista/" + Datos.get(i).getTienda_img_lista();
Picasso
.with(getContext())
.load(urlFinal)
.transform(new RoundedCornersTransformation(9, 9))
.into(holder.smartImageView);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.likeButton.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.imagenFondoLista);
params.addRule(RelativeLayout.ALIGN_RIGHT, R.id.imagenFondoLista);
holder.likeButton.setLayoutParams(params);
holder.tvNombre.setText(Datos.get(i).getTienda_nombre());
holder.tvDescripcion.setText(Datos.get(i).getTienda_clasificacion_descripcion());
holder.tvDistancia.setText(Datos.get(i).getTienda_distancia().toString().substring(0, 4));
like = Datos.get(i).getFavorito();
if (like.equals("1")) {
holder.likeButton.setLiked(true);
} else {
holder.likeButton.setLiked(false);
}
holder.likeButton.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(final LikeButton likeButton) {
URL_SET_LIKE = "http://www.ws.com.mx/ws/servicioInsertaFavoritos.php" +
"?idCliente=" + userId +
"&idTienda=" + Datos.get(i).getTienda_id();
DriveLikeBtn(URL_SET_LIKE);
}
@Override
public void unLiked(final LikeButton likeButton) {
URL_SET_UNLIKE = "http://www.ws.com.mx/ws/servicioEliminaFavoritos.php" +
"?idCliente=" + userId +
"&idTienda=" + Datos.get(i).getTienda_id();
DriveLikeBtn(URL_SET_UNLIKE);
}
private void DriveLikeBtn(final String url_set_like) {
class setLike extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... strings) {
String success = null;
ServiceHandler jsonParser = new ServiceHandler();
String json = jsonParser.makeServiceCall(url_set_like, ServiceHandler.GET);
String jsonFinal = "[" + json + "]";
Log.e("URL de LIKE: >>>>", url_set_like);
if (json != null) {
try {
JSONArray likes = new JSONArray(jsonFinal);
JSONObject setLikeObj = (JSONObject) likes.get(0);
likerGS = new LikerClass(
setLikeObj.getInt("success"),
setLikeObj.getString("error_message")
);
success = String.valueOf(likerGS.getSuccess());
} catch (JSONException e) {
e.printStackTrace();
}
}
return success;
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
retLiker = result;
}
}
new setLike().execute();
}
});
holder.smartImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(getContext(), idTienda.get(i).toString(), Toast.LENGTH_SHORT).show();
String dataIntent = Datos.get(i).getTienda_id();
Intent intent = new Intent(getContext(), DetailActivity.class);
intent.putExtra("idstore", dataIntent);
intent.putExtra("idClient", userId);
startActivity(intent);
}
});
viewGroup1.setTag(holder);
}else{
holder = (ViewHolder)viewGroup1.getTag();
}
imagenAdapter.notifyDataSetChanged();
return viewGroup1;
}
@Override
public Filter getFilter() {
if (filtro == null){
filtro = new CustomFilter();
}
return filtro;
}
class CustomFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0){
constraint = constraint.toString().toUpperCase();
ArrayList<FilterData> filtro = new ArrayList<FilterData>();
for (int i = 0; i < filtroList.size(); i++){
if (filtroList.get(i).getTienda_nombre().toUpperCase().contains(constraint)){
FilterData d = new FilterData(
filtroList.get(i).getTienda_id(),
filtroList.get(i).getTienda_nombre(),
filtroList.get(i).getTienda_img_lista(),
filtroList.get(i).getTienda_img_logo(),
filtroList.get(i).getTienda_latitud(),
filtroList.get(i).getTienda_longitud(),
filtroList.get(i).getTienda_distancia(),
filtroList.get(i).getTienda_clasificacion_descripcion(),
filtroList.get(i).getFavorito());
filtro.add(d);
}
}
results.count = filtro.size();
results.values = filtro;
}else{
results.count = filtroList.size();
results.values = filtroList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.count > 0){
Datos = (ArrayList<FilterData>)results.values;
notifyDataSetChanged();
}else{
Log.println(Log.INFO, "RESULTS", "FOUND");
notifyDataSetInvalidated();
}
}
}
}