Я создал SearchActivity
и импортированные в него в ArrayList
так:Показать товары в RecyclerView
В моей MainActivity
:
private ArrayList<Accordo> getChords() {
ArrayList<Accordo> chords = new ArrayList<>();
Accordo a=new Accordo();
a.setName("Do maggiore");
a.setNote("Do, Mi, Sol");
a.setImage(R.drawable.do_maggiore);
chords.add(a);
a=new Accordo();
a.setName("do 5");
a.setNote("na, na, na");
a.setImage(R.drawable.do5);
chords.add(a);
a=new Accordo();
a.setName("do 6");
a.setNote("na,na,na");
a.setImage(R.drawable.do6);
chords.add(a);
//other elements
return chords;
}
/** start SearchActivity when ImageButton is pressed */
ImageButton cerca = (ImageButton) findViewById(R.id.search);
cerca.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
ArrayList<Accordo> chords = new ArrayList<Accordo>();
intent.putExtra("chords", chords);
startActivity(intent);
}
});
и это мой SearchActivity
:
public class SearchActivity extends Activity {
SearchView sv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search_layout);
ArrayList<Accordo> chords = (ArrayList<Accordo>) getIntent().getSerializableExtra("chords");
sv = (SearchView) findViewById(R.id.testo_ricerca);
RecyclerView rv = (RecyclerView) findViewById(R.id.lista_ricerca);
//SET THE PROPERTIES
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setItemAnimator(new DefaultItemAnimator());
//SET ADAPTER
final SearchAdapter adapter = new SearchAdapter(this, chords);
rv.setAdapter(adapter);
//SEARCH
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//FILTER AS YOU TYPE
adapter.getFilter().filter(newText);
return false;
}
});
}
}
Теперь, хотя я создал пользовательский адаптер, RecyclerView
в моем SearchActivity
не отображает ни одного элемента.
это мой адаптер:
public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchHolder> implements Filterable {
Context context;
ArrayList<Accordo> chords, filterList;
SearchFilter filter;
public class SearchHolder extends RecyclerView.ViewHolder {
//VIEWS
TextView nome;
public SearchHolder(View view){
super(view);
this.nome = (TextView) view.findViewById(R.id.ricerca_nome);
}
}
public SearchAdapter(Context ctx, ArrayList<Accordo> chords){
this.context = ctx;
this.chords = chords;
this.filterList = chords;
}
@Override
public SearchHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// convert xml to View Object
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_row, parent, false);
return new SearchHolder(v);
}
@Override
public void onBindViewHolder(SearchHolder holder, int position) {
//BIND DATA
holder.nome.setText(chords.get(position).getNome());
}
@Override
public int getItemCount() {
return chords.size();
}
@Override
public Filter getFilter() {
if (filter==null)
filter = new SearchFilter(filterList, this); //this e' l'adapter stesso
return filter;
}
}
, когда я пытаюсь построить приложение я не получить какие-либо ошибки, так что я действительно не могу понять, почему это происходит.
Как вы можете видеть из приведенного выше кода, у меня есть пользовательский search_row
для моего searchRecyclerView
, но адаптер должен быть установлен правильно.
Надеюсь, вы можете мне помочь!
EDIT:
это мой SearchFilter.class
public class SearchFilter extends Filter{
SearchAdapter adapter;
ArrayList<Accordo> filterList;
public SearchFilter(ArrayList<Accordo> filterList, SearchAdapter adapter) {
this.adapter=adapter;
this.filterList=filterList;
}
@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 THE FILTERED CHORDS*/
ArrayList<Accordo> filteredChords = new ArrayList<>();
for(int i=0; i<filterList.size();i++){
//CHECK
if(filterList.get(i).getNome().toUpperCase().contains(constraint))
//ADD CHORD TO FILTEREDCHPRDS
filteredChords.add(filterList.get(i));
}
results.count = filteredChords.size();
results.values = filteredChords;
} else {
results.count = filterList.size(); //0
results.values = filterList; //null
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
adapter.filterList = (ArrayList<Accordo>) results.values;
//REFRESH
adapter.notifyDataSetChanged();
}
}
К сожалению, я забыл включить в список , конечно, есть вещи в нем, у меня есть это в моей MainActivity – Daniele
Значит, он работает прямо сейчас? – Drv
Я обновил вопрос. Нет, я забыл добавить его в вопрос, но у меня это было в моем проекте. – Daniele