Фильтр поиска по списку элементов возвращает неверные результаты при нажатии элемента, - PullRequest
1 голос
/ 09 февраля 2020

У меня есть просмотр списка, отфильтрованный по тексту редактирования сверху. Однако, когда я нажимаю на искомый предмет, я получаю результат выбора другого предмета.

Я знаю, что подобные вопросы уже задавались и на них отвечали многие, но я прошел по всему форуму, но я ломаю голову от долгой спины и извиняюсь за новичка ie много.

Любая помощь будет оценено.

Мой адаптер:

public class Srv_Adapter extends RecyclerView.Adapter<Srv_Adapter.MyViewHolder> implements Filterable {

    List<Srv_Pets> pets, srvPetsFilter;
    private Context context;
    private RecyclerViewClickListener mListener;
    Srv_CustomFilter filter;

    public Srv_Adapter(List<Srv_Pets> pets, Context context, RecyclerViewClickListener listener) {
        this.pets = pets;
        this.srvPetsFilter = pets;
        this.context = context;
        this.mListener = listener;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_srv, parent, false);
        return new MyViewHolder(view, mListener);
    }

    @SuppressLint("CheckResult")
    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {

        holder.mName.setText(pets.get(position).getName());
        holder.mType.setText(pets.get(position).getModel() + " / "
                + pets.get(position).getCreated_by());
        holder.mDate.setText(pets.get(position).getBirth());

        RequestOptions requestOptions = new RequestOptions();
        requestOptions.skipMemoryCache(true);
        requestOptions.diskCacheStrategy(DiskCacheStrategy.NONE);
        requestOptions.placeholder(R.drawable.logo);
        requestOptions.error(R.drawable.logo);

        Glide.with(context)
                .load(pets.get(position).getPicture())
                .apply(requestOptions)
                .into(holder.mPicture);

        final Boolean love = pets.get(position).getLove();

        if (love){
            holder.mLove.setImageResource(R.drawable.likeon);
        } else {
            holder.mLove.setImageResource(R.drawable.likeof);
        }

    }

    @Override
    public int getItemCount() {
        return pets.size();
    }


    @Override
    public Filter getFilter() {
        if (filter==null) {

            filter=new Srv_CustomFilter((ArrayList<Srv_Pets>) srvPetsFilter,this);

        }
        return filter;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        private RecyclerViewClickListener mListener;
        private CircleImageView mPicture;
        private ImageView mLove;
        private TextView mName, mType, mDate;
        private RelativeLayout mRowContainer;

        public MyViewHolder(View itemView, RecyclerViewClickListener listener) {
            super(itemView);
            mPicture = itemView.findViewById(R.id.picture);
            mName = itemView.findViewById(R.id.name);
            mType = itemView.findViewById(R.id.type);
            mLove = itemView.findViewById(R.id.love);
            mDate = itemView.findViewById(R.id.date);
            mRowContainer = itemView.findViewById(R.id.row_container);

            mListener = listener;
            mRowContainer.setOnClickListener(this);
            mLove.setOnClickListener(this);
        }




        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.row_container:
                    mListener.onRowClick(mRowContainer, getAdapterPosition());
                    break;
                case R.id.love:
                    mListener.onLoveClick(mLove, getAdapterPosition());
                    break;
                default:
                    break;
            }
        }
    }

    public interface RecyclerViewClickListener {
        void onRowClick(View view, int position);
        void onLoveClick(View view, int position);
    }

}

Поиск в меню Активность

public class Service_Main extends AppCompatActivity{

    SharedPreferences prf;
    Intent intent;

    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private Srv_Adapter srvAdapter;
    private List<Srv_Pets> srvPetsList;
    Srv_ApiInterface srvApiInterface;
    Srv_Adapter.RecyclerViewClickListener listener;
    ProgressBar progressBar;
    private String userInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.service_main);



        srvApiInterface = Srv_ApiClient.getApiClient().create(Srv_ApiInterface.class);
        progressBar = findViewById(R.id.progress);
        recyclerView = findViewById(R.id.recyclerView);
        layoutManager = new LinearLayoutManager(this);
        TextView result = (TextView)findViewById(R.id.result);
        recyclerView.setLayoutManager(layoutManager);

        prf = getSharedPreferences("user_details",MODE_PRIVATE);
        intent = new Intent(Service_Main.this, loginActivity.class);

        userInfo = prf.getString("username",null);




        listener = new Srv_Adapter.RecyclerViewClickListener() {

            private Srv_Pets getIteamposition(int position)
            {
                return srvPetsList.get(position);


            }




            @Override
            public void onRowClick(View view, final int position) {


                Intent intent = new Intent(Service_Main.this, Service_edit.class);
                intent.putExtra("id", srvPetsList.get(position).getId());
                intent.putExtra("name", srvPetsList.get(position).getName());
                intent.putExtra("species", srvPetsList.get(position).getSpecies());
                intent.putExtra("jobcard", srvPetsList.get(position).getJobcard());
                intent.putExtra("model_code", srvPetsList.get(position).getModel_code());
                intent.putExtra("picture", srvPetsList.get(position).getPicture());
                intent.putExtra("birth", srvPetsList.get(position).getBirth());
                intent.putExtra("entry_mode", srvPetsList.get(position).getEntry_mode());
                intent.putExtra("pickup_done_by_code", srvPetsList.get(position).getPickup_done_by_code());
                intent.putExtra("drop_mode", srvPetsList.get(position).getDrop_mode());
                intent.putExtra("service_type", srvPetsList.get(position).getDrop_mode());
                intent.putExtra("drop_done_by_code", srvPetsList.get(position).getDrop_done_by_code());
                intent.putExtra("pick_emp_name", srvPetsList.get(position).getPick_emp_name());
                intent.putExtra("drop_emp_name", srvPetsList.get(position).getDrop_emp_name());
                startActivity(intent);

                final int id = srvPetsList.get(position).getId();
                final Boolean love = srvPetsList.get(position).getLove();
                final ImageView mLove = view.findViewById(R.id.love);

                if (love){
                    mLove.setImageResource(R.drawable.likeof);
                    srvPetsList.get(position).setLove(false);
                    updateLove("Rd_status", id, false);
                    srvAdapter.notifyDataSetChanged();
                } else {
                    mLove.setImageResource(R.drawable.likeon);
                    srvPetsList.get(position).setLove(true);
                    updateLove("Rd_status", id, true);
                    srvAdapter.notifyDataSetChanged();
                }

            }


            @Override
            public void onLoveClick(View view, int position) {

          //      final int id = srvPetsList.get(position).getId();
           //     final Boolean love = srvPetsList.get(position).getLove();
           //     final ImageView mLove = view.findViewById(R.id.love);

            //    if (love){
            //        mLove.setImageResource(R.drawable.likeof);
             //       srvPetsList.get(position).setLove(false);
                 //   updateLove("Rd_status", id, false);
               //     srvAdapter.notifyDataSetChanged();
              //  } else {
              //      mLove.setImageResource(R.drawable.likeon);
               //     srvPetsList.get(position).setLove(true);
                  //  updateLove("Rd_status", id, true);
             //       srvAdapter.notifyDataSetChanged();
             //   }

            }
        };

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(Service_Main.this, Service_edit.class));
            }
        });

        FloatingActionButton fab1 = findViewById(R.id.log_out);
        fab1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startActivity(new Intent(Service_Main.this, HomePage.class));

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        final SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        MenuItem searchMenuItem = menu.findItem(R.id.action_search);

        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName())
        );
        searchView.setQueryHint("Search Pet...");

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(final String query) {

                srvAdapter.getFilter().filter(query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {

                srvAdapter.getFilter().filter(newText);
                return false;
            }
        });

        searchMenuItem.getIcon().setVisible(false, false);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void getPets(){

        String username = userInfo;

        Call<List<Srv_Pets>> call = srvApiInterface.getPets(username);
        call.enqueue(new Callback<List<Srv_Pets>>() {
            @Override
            public void onResponse(Call<List<Srv_Pets>> call, Response<List<Srv_Pets>> response) {
                progressBar.setVisibility(View.GONE);
                srvPetsList = response.body();
                Log.i(Service_Main.class.getSimpleName(), response.body().toString());
                srvAdapter = new Srv_Adapter(srvPetsList, Service_Main.this, listener);
                recyclerView.setAdapter(srvAdapter);
                srvAdapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<List<Srv_Pets>> call, Throwable t) {
                Toast.makeText(Service_Main.this, "rp :"+
                        t.getMessage().toString(),
                        Toast.LENGTH_SHORT).show();
            }
        });
    }


    public void updateLove(final String key, final int id, final Boolean love){

        String night_updated_by = userInfo;
        String reg_num = userInfo;
        Call<Srv_Pets> call = srvApiInterface.updateLove(key, id, love, night_updated_by, reg_num);

        call.enqueue(new Callback<Srv_Pets>() {
            @Override
            public void onResponse(Call<Srv_Pets> call, Response<Srv_Pets> response) {

                Log.i(Service_Main.class.getSimpleName(), "Response "+response.toString());

                String value = response.body().getValue();
                String message = response.body().getMassage();

                if (value.equals("1")){
                    Toast.makeText(Service_Main.this, message, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(Service_Main.this, message, Toast.LENGTH_SHORT).show();
                }

            }

            @Override
            public void onFailure(Call<Srv_Pets> call, Throwable t) {
                Toast.makeText(Service_Main.this, t.getMessage().toString(), Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    protected void onResume() {
        super.onResume();
        getPets();
    }

}

Список предметов из PHP, MYSQL используя Volly

package com.haerul.mypets.service;

import com.google.gson.annotations.SerializedName;

public class Srv_Pets {

    @SerializedName("id")
    private int id;
    @SerializedName("name")
    private String name;
    @SerializedName("species")
    private String species;
    @SerializedName("breed")
    private String breed;
    @SerializedName("model_code")
    private int model_code;
    @SerializedName("jobcard")
    private int jobcard;
    @SerializedName("birth")
    private String birth;
    @SerializedName("picture")
    private String picture;
    @SerializedName("love")
    private Boolean love;
    @SerializedName("value")
    private String value;
    @SerializedName("message")
    private String massage;
    @SerializedName("model")
    private String model;
    @SerializedName("entry_mode")
    private int entry_mode;
    @SerializedName("drop_mode")
    private int drop_mode;
    @SerializedName("pickup_done_by_code")
    private String pickup_done_by_code;
    @SerializedName("service_type")
    private int service_type;
    @SerializedName("drop_done_by_code")
    private String drop_done_by_code;
    @SerializedName("pick_emp_name")
    private String pick_emp_name;
    @SerializedName("drop_emp_name")
    private String drop_emp_name;
    @SerializedName("created_by")
    private String created_by;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSpecies() {
        return species;
    }

    public void setSpecies(String species) {
        this.species = species;
    }

    public int getModel_code() {
        return model_code;
    }

    public void setModel_code(int gender) {
        this.model_code = model_code;
    }

    public int getJobcard() {
        return jobcard;
    }

    public void setJobcard(int jobcard) {
        this.jobcard = jobcard;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    public String getPicture() {
        return picture;
    }

    public void setPicture(String picture) {
        this.picture = picture;
    }

    public Boolean getLove() {
        return love;
    }

    public void setLove(Boolean love) {
        this.love = love;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getMassage() {
        return massage;
    }

    public void setMassage(String massage) {
        this.massage = massage;
    }


    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public int getEntry_mode(){

        return entry_mode;
    }

    public void setEntry_mode(int entry_mode){
        this.entry_mode = entry_mode;

    }

    public String getPickup_done_by_code() {
        return pickup_done_by_code;
    }

    public void setPickup_done_by_code(String pickup_done_by_code) {
        this.pickup_done_by_code = pickup_done_by_code;
    }

    public int getDrop_mode(){
        return drop_mode;
    }

    public void setDrop_mode(int drop_mode){
        this.drop_mode = drop_mode;
    }

    public int getService_type(){
        return service_type;

    }

    public void setService_type(){
        this.service_type = service_type;

    }

    public String getDrop_done_by_code(){
        return drop_done_by_code;

    }

    public void setDrop_done_by_code(String drop_done_by_code){
        this.pickup_done_by_code = drop_done_by_code;

    }

    public String getPick_emp_name(){
        return pick_emp_name;

    }

    public void setPick_emp_name(String pick_emp_name){
        this.pick_emp_name = pick_emp_name;

    }

    public String getDrop_emp_name(){
        return drop_emp_name;

    }

    public void setDrop_emp_name(String drop_emp_name){
        this.pick_emp_name = pick_emp_name;

    }

    public String getCreated_by(){
        return created_by;
    }

    public void setCreated_by(String created_by){
        this.created_by = created_by;

    }

}

...