在Android中搜索RecyclerView项目后,始终打开RecyclerView的第一个项目
在Android中搜索RecyclerView项目后,当我打开搜索的项目时,总是打开RecyclerView的第一个项目,它打开的是RecyclerView的第一个项目,而不是搜索的项目。即使搜索和查找项目成功 MainActivity.java在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
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);
}
}