save actions performed in listview android

0

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();
            }
        }
    }
}
    
asked by Sergio García 30.01.2017 в 20:06
source

1 answer

0

I've achieved it using setSelectionFromTop () as follows: Before updating my adapter:

lastViewedPosition = list.getFirstVisiblePosition();
        View v = list.getChildAt(0);
        topOffset = (v == null)? 0 : v.getTop();

Afterwards, I update my adapter:

imagenAdapter = new ImagenAdapter(getContext(), getDatos());
        list.setAdapter(imagenAdapter);

In the end, I only use setSelectionFromTop ():

list.setSelectionFromTop(lastViewedPosition, topOffset);

And it worked for me!

    
answered by 01.02.2017 / 20:46
source