Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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
Android 自定义适配器的Listview Searchview工作不正常_Android_Listview_Android Fragments_Searchview - Fatal编程技术网

Android 自定义适配器的Listview Searchview工作不正常

Android 自定义适配器的Listview Searchview工作不正常,android,listview,android-fragments,searchview,Android,Listview,Android Fragments,Searchview,我正在创建一个android应用程序。在应用程序中,我有一个登录页面。登录后,将显示用户列表。userlist活动是HomeActivity.java,它包含两个名为UserListFragment.java和ChatFragment.java的片段。userlist是从firebase显示的。java包含一个actionbar,它有一个搜索菜单和注销菜单 我在actionbar中使用searchview,它工作正常,即搜索内容。但我有两个问题 1) 如果我搜索不存在的东西。假设listview

我正在创建一个android应用程序。在应用程序中,我有一个登录页面。登录后,将显示用户列表。userlist活动是HomeActivity.java,它包含两个名为UserListFragment.java和ChatFragment.java的片段。userlist是从firebase显示的。java包含一个actionbar,它有一个搜索菜单和注销菜单

我在actionbar中使用searchview,它工作正常,即搜索内容。但我有两个问题

1) 如果我搜索不存在的东西。假设listview中有“Rider”,那么它将进行搜索,但如果我键入“Rids”,并且listview中不包含任何类似字母的用户,那么一旦我键入“s”,我的应用程序就会崩溃

2) 现在,我面临的下一个问题是。我有userlist,当我点击某个用户时,它会转到另一个片段,即ChatFragment。现在,如果我从ChatFragment返回到显示我的列表的UserFragment,则只显示我之前搜索过的用户名,而不是我的原始userlist

我正在发布与我的问题相关的代码。如果您需要任何其他代码,请告诉我

CustomAdapter.java

@Override
public Filter getFilter() {
    Filter filter = new Filter() {

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,FilterResults results) {

            if (results != null) {
                clear();
                addAll((List<UserData>) results.values);
                arrayList = (List<UserData>) results.values;
                notifyDataSetChanged();
            }

        }
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();        // Holds the results of a filtering operation in values
            List<UserData> FilteredArrList = new ArrayList<UserData>();

            if (mOriginalValues == null) {
                mOriginalValues = new ArrayList<UserData>(arrayList); // saves the original data in mOriginalValues
            }

            if (constraint == null || constraint.length() == 0) {

                // set the Original result to return
                results.count = mOriginalValues.size();
                results.values = mOriginalValues;
            } else {
                constraint = constraint.toString().toLowerCase();
               // Log.i(TAG,mOriginalValues.toString());

                for (int i = 0; i < mOriginalValues.size(); i++) {
                    String data = mOriginalValues.get(i).getName();
                    //String temp = mOriginalValues.add()
                    if (data.toLowerCase().contains(constraint.toString())) {
                        FilteredArrList.add(mOriginalValues.get(i));
                        results.count = FilteredArrList.size();
                        results.values = FilteredArrList;
                    }
                }
                // set the Filtered result to return

            }

            return results;
        }

    };
    return filter;
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {

    inflater.inflate(R.menu.menu_userlist,menu);
    MenuItem item = menu.findItem(R.id.menuSearch);

    SearchView searchView = (SearchView)item.getActionView();

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            Log.i(TAG,newText);
            adapter.getFilter().filter(newText);
            return true;
        }
    });
    SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener(){

        @Override
        public boolean onClose() {
            adapter.getFilter().filter("");
            return true;
        }
    };
    super.onCreateOptionsMenu(menu,inflater);
}

private void logoutUser(){
    Intent I = new Intent(getActivity(), LoginActivity.class);
    startActivity(I);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.menuSearch :
            return true;

        case R.id.menuLogout :
            logoutUser();
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }

}
日志

 E/AndroidRuntime: FATAL EXCEPTION: main
              Process: , PID: 21743
              java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
                  at java.util.ArrayList.addAll(ArrayList.java:188)
                  at     android.widget.ArrayAdapter.addAll(ArrayAdapter.java:195)
                  at CustomAdapter$1.publishResults(CustomAdapter.java:135)
                  at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
                  at android.os.Handler.dispatchMessage(Handler.java:111)
                  at android.os.Looper.loop(Looper.java:194)
                  at android.app.ActivityThread.main(ActivityThread.java:5637)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:372)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
D/Surface: Surface::setBuffersDimensions(this=0x7f8ea1b400,w=720,h=1280)

关于问题1,您得到了什么错误。请把你的书包寄出去trace@darwin添加了堆栈跟踪。我认为问题在于addAll((List)results.values);,可能是result.values为null。请确保result.values不为null。您能帮助我如何解决此问题吗。?如果名为的用户不在场,我可以告诉您我想做什么。如果没有结果,我想在我的listview中打印一条没有搜索结果的语句,这通常发生在应用程序中。请使用“if(results.values!=null)”而不是“if(results!=null)”,并检查崩溃是否仍然发生