#java #android
#java #Android
Вопрос:
Я следовал руководствам, но у каждого из них своя логика, я попробовал этот код, в котором возникла проблема с тем, что список не заменяется новым списком, в то время как я написал код замены списка результатов поиска более старым списком, помните, что мой recycler-view
работает отлично, единственная проблема в том, что вид поиска не работает
вот мой код
adapter class
public class AdlistAdapter extends RecyclerView.Adapter<AdlistAdapter.AdViewHolder> {
private Context mCtx;
private List<DetailsofAd> productList;
public AdlistAdapter(Context mCtx, List<DetailsofAd> productList) {
this.mCtx = mCtx;
this.productList = productList;
}
//note my list is perfectly working
//here is filter method
public void setFilter(ArrayList<DetailsofAd> newList){
productList=new ArrayList<>();
productList.addAll(newList);
notifyDataSetChanged();
}
основной класс
public class SearchDishes extends AppCompatActivity implements SearchView.OnQueryTextListener{
List<DetailsofAd> productList;
RecyclerView recyclerView;
android.support.v7.widget.Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_dishes);
toolbar=(android.support.v7.widget.Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
recyclerView = (RecyclerView) findViewById(R.id.recylcermain);
empty=(TextView) findViewById(R.id.empty);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
productList = new ArrayList<>(); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.action_bar,menu);
MenuItem menuItem=menu.findItem(R.id.search);
android.support.v7.widget.SearchView searchView=(android.support.v7.widget.SearchView)menuItem.getActionView();
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
newText=newText.toLowerCase();
ArrayList<DetailsofAd> newList=new ArrayList<>();
for (DetailsofAd detailsofAd : newList)
{
String title=detailsofAd.getTitle().toLowerCase();
if (title.contains(newText))
{
newList.add(detailsofAd);
}
}
AdlistAdapter adapter = new AdlistAdapter(SearchDishes.this, newList);
adapter.setFilter(newList);
return false;
}
Ответ №1:
Не создавайте новый список в методе filter. просто назначьте по this.ProductList . пожалуйста, измените свой код на это.
public class AdlistAdapter extends RecyclerView.Adapter<AdlistAdapter.AdViewHolder> {
private Context mCtx;
private List<DetailsofAd> productList;
public AdlistAdapter(Context mCtx, List<DetailsofAd> productList) {
this.mCtx = mCtx;
this.productList = productList;
}
//note my list is perfectly working
//here is filter method
public void setFilter(ArrayList<DetailsofAd> newList){
this.productList = newList;
notifyDataSetChanged();
}
Комментарии:
1. @muizzalvi я не мог понять, почему вы создаете newList в методе onQueryTextChange . вы фильтруете пустой список. пожалуйста, фильтруйте с помощью непустого списка.
2. как я уже упоминал, я только что следовал руководству, мой onQueryTextChange даже не отображает всплывающее окно, я думаю, что есть проблема с версиями SearchView.. пожалуйста, предоставьте ссылку на последний и простой учебник для этого, если у вас есть, спасибо
3. смотрите это