在Android中搜索RecyclerView项目后,始终打开RecyclerView的第一个项目

在Android中搜索RecyclerView项目后,始终打开RecyclerView的第一个项目,android,search,android-recyclerview,Android,Search,Android Recyclerview,在Android中搜索RecyclerView项目后,当我打开搜索的项目时,总是打开RecyclerView的第一个项目,它打开的是RecyclerView的第一个项目,而不是搜索的项目。即使搜索和查找项目成功 MainActivity.java public class MainActivityDalil extends AppCompatActivity { private RecyclerView recyclerView; private RecyclerView.La

在Android中搜索RecyclerView项目后,当我打开搜索的项目时,总是打开RecyclerView的第一个项目,它打开的是RecyclerView的第一个项目,而不是搜索的项目。即使搜索和查找项目成功

MainActivity.java

public class MainActivityDalil extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private Adapter adapter;
    private List<Pets> petsList;
    ApiInterface apiInterface;
    Adapter.RecyclerViewClickListener listener;
    ProgressBar progressBar;

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

        apiInterface = ApiClient.getApiClient().create(ApiInterface.class);

        progressBar = findViewById(R.id.progress);
        recyclerView = findViewById(R.id.recyclerView);

        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        listener = new Adapter.RecyclerViewClickListener() {
            @Override
            public void onRowClick(View view, final int position) {

                Intent intent = new Intent(MainActivityDalil.this, ViewActivity.class);
                intent.putExtra("id", petsList.get(position).getId());
                intent.putExtra("name", petsList.get(position).getName());
                intent.putExtra("species", petsList.get(position).getSpecies());
                intent.putExtra("breed", petsList.get(position).getBreed());
                intent.putExtra("gender", petsList.get(position).getGender());
                intent.putExtra("picture", petsList.get(position).getPicture());
                intent.putExtra("birth", petsList.get(position).getBirth());
                startActivity(intent);

            }

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

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

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

            }
        };

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivityDalil.this, EditorActivity.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...");
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(final String query) {

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

            @Override
            public boolean onQueryTextChange(String newText) {

                adapter.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(){

        Call<List<Pets>> call = apiInterface.getPets();
        call.enqueue(new Callback<List<Pets>>() {
            @Override
            public void onResponse(Call<List<Pets>> call, Response<List<Pets>> response) {
                progressBar.setVisibility(View.GONE);
                petsList = response.body();
                Log.i(MainActivity.class.getSimpleName(), response.body().toString());
                adapter = new Adapter(petsList, MainActivityDalil.this, listener);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

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

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

        Call<Pets> call = apiInterface.updateLove(key, id, love);

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

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

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

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

            }

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

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

}

公共类MainActivityDall扩展AppCompativeActivity{
私人回收站;
private RecyclerView.LayoutManager LayoutManager;
专用适配器;
私人名单;
api接口api接口;
Adapter.RecycleServiceClickListener侦听器;
ProgressBar ProgressBar;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u main\u dalil);
apiInterface=ApiClient.getApiClient().create(apiInterface.class);
progressBar=findViewById(R.id.progress);
recyclerView=findViewById(R.id.recyclerView);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
listener=新适配器。RecycleServiceClickListener(){
@凌驾
public void onRowClick(视图,最终整型位置){
意向意向=新意向(MainActivityDalil.this、ViewActivity.class);
intent.putExtra(“id”,petsList.get(position.getId());
intent.putExtra(“name”,petsList.get(position.getName());
intent.putExtra(“物种”,petsList.get(position.getSpecies());
intent.putExtra(“繁殖”,petsList.get(position.getbride());
intent.putExtra(“性别”,petsList.get(position.getGender());
intent.putExtra(“picture”,petsList.get(position.getPicture());
intent.putExtra(“出生”,petsList.get(position.getBirth());
星触觉(意向);
}
@凌驾
公共void onLoveClick(视图,int位置){
final int id=petsList.get(position.getId();
最终布尔值love=petsList.get(position.getLove();
最终图像视图mLove=view.findViewById(R.id.love);
如果(爱){
mLove.setImageResource(R.drawable.likeof);
petsList.get(position).setLove(false);
updateLove(“update_love”,id,false);
adapter.notifyDataSetChanged();
}否则{
mLove.setImageResource(R.drawable.likeon);
petsList.get(position.setLove(true);
updateLove(“update_love”,id,true);
adapter.notifyDataSetChanged();
}
}
};
FloatingActionButton fab=findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
startActivity(新意图(MainActivityDalil.this、EditorActivity.class));
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。主菜单,菜单);
SearchManager SearchManager=(SearchManager)getSystemService(Context.SEARCH\u服务);
final SearchView SearchView=(SearchView)menu.findItem(R.id.action_search).getActionView();
MenuItem searchMenuItem=menu.findItem(R.id.action\u search);
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName())
);
searchView.setQueryHint(“搜索…”);
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(最终字符串查询){
adapter.getFilter().filter(查询);
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
adapter.getFilter().filter(newText);
返回false;
}
});
searchMenuItem.getIcon().setVisible(false,false);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
//if(id==R.id.action\u设置){
//返回true;
//        }
返回super.onOptionsItemSelected(项目);
}
公共空间无效getPets(){
Call Call=apinterface.getPets();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
progressBar.setVisibility(View.GONE);
petsList=response.body();
Log.i(MainActivity.class.getSimpleName(),response.body().toString());
适配器=新适配器(petsList、MainActivityDalil.this、listener);
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(MainActivityDalil.this,“rp:”+
t、 getMessage().toString(),
吐司。长度(短)。show();
}
});
}
public void updateLove(最终字符串键、最终整数id、最终布尔值){
Call Call=apinterface.updateLove(key、id、love);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.i(MainActivity.class.getSimpleName(),“Response”+Response.toString());
字符串值=response.body().getValue();
字符串消息=response.body().get按摩();
如果(值等于(“1”)){
Toast.makeText(MainActivityDalil.this、message、Toast.LENGTH_SHORT.show();
public class CustomFilter extends Filter {

    Adapter adapter;
    ArrayList<Pets> filterList;

    public CustomFilter(ArrayList<Pets> filterList, Adapter adapter)
    {
        this.adapter=adapter;
        this.filterList=filterList;

    }

    //FILTERING OCURS
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results=new FilterResults();
        //CHECK CONSTRAINT VALIDITY
        if(constraint != null && constraint.length() > 0)
        {
            //CHANGE TO UPPER
            constraint=constraint.toString().toUpperCase();
            //STORE OUR FILTERED PLAYERS
            ArrayList<Pets> filteredPets=new ArrayList<>();

            for (int i=0;i<filterList.size();i++)
            {
                //CHECK
                if(filterList.get(i).getName().toUpperCase().contains(constraint))
                {
                    //ADD PLAYER TO FILTERED PLAYERS
                    filteredPets.add(filterList.get(i));
                }
            }

            results.count=filteredPets.size();
            results.values=filteredPets;

        }else
        {
            results.count=filterList.size();
            results.values=filterList;
        }

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {

        adapter.pets= (ArrayList<Pets>) results.values;

        //REFRESH
        adapter.notifyDataSetChanged();

    }

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

    List<Pets> pets, petsFilter;
    private Context context;
    private RecyclerViewClickListener mListener;
    CustomFilter filter;

    public Adapter(List<Pets> pets, Context context, RecyclerViewClickListener listener) {
        this.pets = pets;
        this.petsFilter = 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_item, 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).getBreed() + " / "
                + pets.get(position).getSpecies());
        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 CustomFilter((ArrayList<Pets>) petsFilter,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);
    }

}