Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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 为什么我的编辑文本没有过滤listview_Java_Android_Listview - Fatal编程技术网

Java 为什么我的编辑文本没有过滤listview

Java 为什么我的编辑文本没有过滤listview,java,android,listview,Java,Android,Listview,我正在尝试筛选从数据库填充的listview。 这是我的活动代码 listView = (ListView) findViewById(R.id.list1); listView.setTextFilterEnabled(true); myAdapter = new MyAdapter(SearchActivity.this, R.layout.list_items_layout); listView.setAdapter(myAdapter); list =

我正在尝试筛选从数据库填充的listview。 这是我的活动代码

listView = (ListView) findViewById(R.id.list1);
    listView.setTextFilterEnabled(true);
    myAdapter = new MyAdapter(SearchActivity.this, R.layout.list_items_layout);
    listView.setAdapter(myAdapter);

    list = new ArrayList<>();

    mDBHelper = new DatabaseHelper(SearchActivity.this);
    sqLiteDatabase = mDBHelper.getReadableDatabase();
    cursor =  mDBHelper.getAll(sqLiteDatabase);

    if(cursor.moveToFirst()){
        do{
            String id, name, email, contact, fav, cat, audio, count;
            id = cursor.getString(0);
            name = cursor.getString(1);
            email = cursor.getString(2);
            contact = cursor.getString(3);
            fav = cursor.getString(4);
            cat = cursor.getString(5);
            audio = cursor.getString(6);
            count = cursor.getString(7);

            Person person = new Person(id,name,email,contact,fav,cat, audio, count);
            myAdapter.add(person);
            list.add(person);
        } while (cursor.moveToNext());
    }

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Person person = list.get(position);

                Intent intent = new Intent(SearchActivity.this, ReceiveDataActivity.class);

                intent.putExtra("KEY_ID", person.getId());
                intent.putExtra("NAME", person.getName());
                intent.putExtra("EMAIL", person.getEmail());
                intent.putExtra("CONTACT", person.getContact());
                intent.putExtra("FAVORITE", person.getFav());
                intent.putExtra("AUDIO", person.getAudio());
                intent.putExtra("COUNT", person.getCount());

                startActivity(intent);
            }
        });


    SearchButton=(Button)findViewById(R.id.searchButton);

    searchName=(EditText)findViewById(R.id.editText);
    searchName.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                // TODO Auto-generated method stub
                SearchActivity.this.myAdapter.getFilter().filter(arg0);
                myAdapter.notifyDataSetChanged();
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub

            }
        });
当我在编辑文本中键入单词时,listview不会过滤


附言:我对Android编程(java)非常陌生。我可能不理解这个解释,但如果有任何帮助,我将不胜感激。

为适配器使用默认过滤器有点麻烦,因为您需要创建一个内部类,并重写几个方法。在适配器中实现以下方法更容易、可读性更强:

public void filter(String charText) {
        list.clear();    // clear list
        charText = charText.toLowerCase();
        if (charText.length() == 0) {
            list.addAll(people);  // restore original list if no filter is applied
        } else {
            for (Object item : people) {
                Person person = (Person) item;
                if (person.getName().toLowerCase().contains(charText)) {
                    list.add(person);   // add item to filtered list if contains string
                }
            }
        }
        notifyDataSetChanged();
    }
您还应该在适配器中创建第二个arrayList来存储原始项的副本,并创建一个方法来初始化它:

 private List people = new ArrayList();


 public void initPeople() {
      people.addAll(list);  // copies original list to people list
 }
从数据库填充列表后,应该初始化人员数组 通过调用myAdapter.initPeople();在搜索活动中

最后,在SearchActivity中,替换SearchActivity.this.myAdapter.getFilter().filter(arg0);与


我确实看到您试图从UI线程上的DB加载数据,这会使您的应用程序变得迟钝,触发ANR,等等on@EpicPandaForce有什么简单的方法可以做到这一点吗?很有魅力。
 private List people = new ArrayList();


 public void initPeople() {
      people.addAll(list);  // copies original list to people list
 }
SearchActivity.this.myAdapter.filter(arg0.toString());