Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据导航栏类别筛选列表_Java_Android_Search_Navigation Drawer - Fatal编程技术网

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,顾名思义,它只包含那些包含
文本
字符串的元素

它在my
MainActivity
中被调用,如下所示:

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();
这肯定会奏效的。如果有任何问题,请告诉我:)

谢谢