Pass fragment detail to another with click, searchview error

0

Hello friends, I have a problem in which I enter after implementing a searchview in my fragment. As you can see there is the list of items and if I click on each one it shows me the detail correctly. When doing a search, it shows me the corresponding filtered items, but when I click on the item I load the data or detail of the unfiltered list, there is my problem. I would like help to solve this problem.

I show example of my custom adapter code

public class TiendaRVAdapter extends RecyclerView.Adapter<TiendaRVAdapter.ViewHolder> implements View.OnClickListener, Filterable{

private List<Tienda> mDataset;
private List<Tienda> mFilteredDataset;
private View.OnClickListener listener;

@Override
public void onClick(View v) {
    if(listener != null){
        listener.onClick(v);
    }
}

@Override
public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            String charString = constraint.toString();
            if(charString.isEmpty()){
                mFilteredDataset = mDataset;
            } else {
                List<Tienda> newFilteredList = new ArrayList<>();
                for (Tienda tienda: mDataset){
                    if(tienda.getNombre().toLowerCase().contains(charString)){
                        newFilteredList.add(tienda);
                    }
                }
                mFilteredDataset = newFilteredList;
            }
            FilterResults filterResults = new FilterResults();
            filterResults.values = mFilteredDataset;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mFilteredDataset = (List<Tienda>) results.values;
            notifyDataSetChanged();
        }
    };
}

public class ViewHolder extends RecyclerView.ViewHolder {
    Context context;

    private TextView txtNombreTienda;
    private TextView txtCategoriaTienda;
    private TextView txtUbicacionTienda;
    private ImageView imageTienda;
    private CardView cardTienda;

    public ViewHolder(View v) {
        super(v);
        context = v.getContext();
        txtNombreTienda = (TextView) v.findViewById(R.id.txtNombreTienda);
        txtCategoriaTienda = (TextView) v.findViewById(R.id.txtCategoriaTienda);
        txtUbicacionTienda = (TextView) v.findViewById(R.id.txtUbicacionTienda);
        imageTienda = (ImageView) v.findViewById(R.id.imageTienda);
        cardTienda = (CardView) v.findViewById(R.id.cardTienda);
    }
}

public void add(int position, Tienda item) {
    mFilteredDataset.add(position, item);
    notifyItemInserted(position);
}

public void remove(Tienda item) {
    int position = mDataset.indexOf(item);
    mDataset.remove(position);
    notifyItemRemoved(position);
}

public TiendaRVAdapter(List<Tienda> myDataset) {
    this.mDataset = myDataset;
    this.mFilteredDataset = myDataset;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_shop, parent, false);
    ViewHolder vh = new ViewHolder(v);
    v.setOnClickListener(this);
    return vh;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    YoYo.with(Techniques.FlipInX).duration(1500).playOn(holder.cardTienda);
    //YoYo.with(Techniques.ZoomInLeft).duration(1500).playOn(holder.imageTienda);
    holder.txtNombreTienda.setText(mFilteredDataset.get(position).getNombre());
    holder.txtCategoriaTienda.setText(mFilteredDataset.get(position).getCategoria());
    holder.txtUbicacionTienda.setText(mFilteredDataset.get(position).getNivel_ubicacion());
    Glide.with(holder.imageTienda.getContext()).load(mFilteredDataset.get(position).getLogo()).diskCacheStrategy(DiskCacheStrategy.ALL).into(holder.imageTienda);
}

@Override
public int getItemCount() {
    if (mFilteredDataset != null)
        return mFilteredDataset.size();
    return 0;
}

public void setOnClickListener(View.OnClickListener listener){
    this.listener = listener;
}

}

My fragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View vista = inflater.inflate(R.layout.fragment_shops, container, false);

    spnCategorias = (Spinner) vista.findViewById(R.id.spnCategorias);
    imgSinConexion = (ImageView) vista.findViewById(R.id.imgSinConexion);
    imgSinConexion.setVisibility(View.INVISIBLE);
    txtSinConexion = (TextView) vista.findViewById(R.id.txtSinConexion);
    txtSinConexion.setVisibility(View.INVISIBLE);
    textView = (TextView) vista.findViewById(R.id.textView);

    ConnectivityManager con = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo nInfo = con.getActiveNetworkInfo();
    if(nInfo!= null && nInfo.isConnected()){
        imgSinConexion.setVisibility(View.INVISIBLE);
        txtSinConexion.setVisibility(View.INVISIBLE);
        getCategories();
        sendRequest();
    } else {
        imgSinConexion.setVisibility(View.VISIBLE);
        txtSinConexion.setVisibility(View.VISIBLE);
        spnCategorias.setVisibility(View.GONE);
        textView.setVisibility(View.GONE);
        Toast.makeText(getActivity(), "No se pudo conectar, verifique el acceso a internet e intente nuevamente", Toast.LENGTH_LONG).show();
    }

    mRecyclerView = (RecyclerView) vista.findViewById(R.id.RecyclerTienda);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
    mRecyclerView.setLayoutManager(mLayoutManager);

    return vista;
}


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
}

public void onButtonPressed(Uri uri) {
    if (mListener != null) {
        mListener.onFragmentInteraction(uri);
    }
}

@Override
public void onDetach() {
    super.onDetach();
    mListener = null;
}

@Override
public boolean onQueryTextSubmit(String query) {
    return false;
}

@Override
public boolean onQueryTextChange(String newText) {
    mAdapter.getFilter().filter(newText);

    return false;
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    getActivity().getMenuInflater().inflate(R.menu.main, menu);
    MenuItem menuItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
    searchView.setOnQueryTextListener(this);
    return;
}

public interface OnFragmentInteractionListener {
    void onFragmentInteraction(Uri uri);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if(context instanceof Activity){
        this.activity = (Activity) context;
        interfaceShop = (IComunicaFragments) this.activity;
    }
}

private void sendRequest(){

    JsonObjectRequest solicitud = new JsonObjectRequest(JSON_URL, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                String datos = response.getString("response");
                JSONArray array = new JSONArray(datos);
                TiendaParse pj = new TiendaParse(""+ array);
                pj.parseTienda();
                mDataset = pj.getShops();
                mAdapter = new TiendaRVAdapter(mDataset);
                mRecyclerView.setAdapter(mAdapter);
                mAdapter.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //Toast.makeText(getActivity(),"Selecionó "+mDataset.get(mRecyclerView.getChildAdapterPosition(v)), Toast.LENGTH_SHORT).show();
                        interfaceShop.sendShop(mDataset.get(mRecyclerView.getChildAdapterPosition(v)));
                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getContext(),"Error "+ error,Toast.LENGTH_SHORT).show();
        }
    });
    VolleySingleton.getInstanciaVolley(getContext()).addToRequestQueue(solicitud);
}

In my mainactivity I implement the interface to call the fragment of the detail and its elements:

DetailShopFragment detalleTienda;

@Override
public void sendShop(Tienda shop) {
    detalleTienda = new DetailShopFragment();
    Bundle bundleEnvio = new Bundle();
    bundleEnvio.putSerializable("tienda", shop);
    detalleTienda.setArguments(bundleEnvio);
    getSupportFragmentManager().beginTransaction().replace(R.id.layout_main,detalleTienda).addToBackStack(null).commit();
    setTitle(R.string.title_detail_shop);
}

Fragment detail:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View vista = inflater.inflate(R.layout.fragment_detail_shop, container, false);

    txtTienda = (TextView) vista.findViewById(R.id.txtTienda);
    txtCategoria = (TextView) vista.findViewById(R.id.txtCategoria);
    txtUbicacion = (TextView) vista.findViewById(R.id.txtUbicacion);
    txtVerMapa = (TextView) vista.findViewById(R.id.txtVerMapa);
    txtHorario = (TextView) vista.findViewById(R.id.txtHorario);
    txtTelefono = (TextView) vista.findViewById(R.id.txtTelefono);
    txtDescripcion = (TextView) vista.findViewById(R.id.txtDescripcion);
    imgTienda = (ImageView) vista.findViewById(R.id.imgTienda);

    txtSinPromos = (TextView) vista.findViewById(R.id.txtSinPromos);
    imgSinPromos = (ImageView) vista.findViewById(R.id.imgSinPromos);

    imgSinPromos.setVisibility(View.GONE);
    txtSinPromos.setVisibility(View.GONE);

    Bundle tienda = getArguments();
    Tienda shop= null;
    if (tienda != null){
        shop= (Tienda) tienda.getSerializable("tienda");
        Glide.with(getActivity()).load(shop.getFoto()).centerCrop().into(imgTienda);
        txtTienda.setText(shop.getNombre());
        txtCategoria.setText(shop.getCategoria());
        txtUbicacion.setText(shop.getNivel_ubicacion());
        txtHorario.setText(shop.getHorario());
        txtTelefono.setText(shop.getTelefono());
        txtDescripcion.setText(shop.getDescripcion());

        final Tienda finalShop = shop;

        MapeoDialog = new Dialog(getActivity());
        txtVerMapa.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showPopUp(v,finalShop.getFoto_ubicacion());
                Toast.makeText(v.getContext(),"Ubicación: "+ finalShop.getNivel_ubicacion(),Toast.LENGTH_SHORT).show();
            }
        });

        mRecyclerView = (RecyclerView) vista.findViewById(R.id.RecyclerPromo);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
        mRecyclerView.setLayoutManager(mLayoutManager);

        getPromociones(finalShop.getId());
    }
    return vista;
}
    
asked by Augusto Mauricio B 06.01.2018 в 02:31
source

0 answers