Java 根据导航栏类别筛选列表
这是我的Java 根据导航栏类别筛选列表,java,android,search,navigation-drawer,Java,Android,Search,Navigation Drawer,这是我的filter()方法,它位于我的RecyclerAdapter.class中: //Do search.. public void filter(final String text) { // dispatch search to a different thread new Thread(new Runnable() { @Override public void run() { // cl
filter()
方法,它位于我的RecyclerAdapter.class
中:
//Do search..
public void filter(final String text) {
// dispatch search to a different thread
new Thread(new Runnable() {
@Override
public void run() {
// clear the filteredList
filteredList.clear();
//if there is no search value load the whole list
if (TextUtils.isEmpty(text)) {
filteredList.addAll(chordsList);
} else {
//iterate through the original list and add to the filteredList
for (Chord chord : chordsList) {
if (chord.getName().toLowerCase().contains(text.toLowerCase())) {
filteredList.add(chord);
}
}
}
//set on UI thread
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
}).start();
}
它基于两个列表,一个是chordlist
,它包含整个列表,另一个是filteredList,顾名思义,它只包含那些包含文本
字符串的元素
它在myMainActivity
中被调用,如下所示:
adapter = new RecyclerAdapter(this, chords);
recyclerView.setAdapter(adapter);
filteredList = new ArrayList<>();
filteredList = adapter.getFilteredList();
现在我需要做的是在onNavigationItemSelected(MenuItem)
方法中,当我点击一个特定的类别时,我需要根据与类别相关的字符串过滤列表
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
// TODO: da rivedere
int id = item.getItemId();
if (id == R.id.nav_c) {
// String text = "c"
// filteredList = all items containing c
// inflate the recyclerView with the new filteredList
}
...
如果你能帮我,那就太好了
提前感谢您的代码运行良好。只是
recyclerView.notifyDataSetChanged()else
方法的filter
部分中缺少code>。这样写:
adapter = new RecyclerAdapter(this, chords);
recyclerView.setAdapter(adapter);
filteredList = new ArrayList<>();
filteredList = adapter.getFilteredList();
//如果没有搜索值,则加载整个列表
if(TextUtils.isEmpty(text)){
filteredList.addAll(和弦列表);
}否则{
//遍历原始列表并添加到filteredList
for(和弦:和弦列表){
if(chord.getName().toLowerCase().contains(text.toLowerCase())){
filteredList.add(和弦);
}
}
}
recyclerView.notifyDataSetChanged();
这肯定会奏效的。如果有任何问题,请告诉我:)
谢谢您的代码运行良好。只是recyclerView.notifyDataSetChanged()else
方法的filter
部分中缺少code>。这样写:
adapter = new RecyclerAdapter(this, chords);
recyclerView.setAdapter(adapter);
filteredList = new ArrayList<>();
filteredList = adapter.getFilteredList();
//如果没有搜索值,则加载整个列表
if(TextUtils.isEmpty(text)){
filteredList.addAll(和弦列表);
}否则{
//遍历原始列表并添加到filteredList
for(和弦:和弦列表){
if(chord.getName().toLowerCase().contains(text.toLowerCase())){
filteredList.add(和弦);
}
}
}
recyclerView.notifyDataSetChanged();
这肯定会奏效的。如果有任何问题,请告诉我:)
谢谢