【问题标题】:Can't reset a listview after filtering过滤后无法重置列表视图
【发布时间】:2013-02-06 11:48:16
【问题描述】:

我目前有一个列表视图填充在我的“onCreate”中类并使用 LIKE 语句对其进行过滤。当我从我的编辑文本中删除字符串搜索(即它是空白的)时,我希望重新显示所有内容。目前我无法做到这一点,显示的数据只是显示最后过滤的数据。

这是我的过滤器:

    searchName = (EditText) findViewById(R.id.inputName);
    searchedListResults.setTextFilterEnabled(true);
    searchName.addTextChangedListener(new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            cursorAdapter.getFilter().filter(s.toString());
        }
    });

    getCons = new DBHandler(this, null, null);
    cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
        public Cursor runQuery(CharSequence constraint) {
            getCons.open();
            return getCons.getChanges(constraint.toString());
        }
    });

这是我的数据库处理程序类中的方法,起初我以为是因为我在“IF”中关闭了游标,但这似乎有所作为。

public Cursor getChanges(String constraintPassed) {

        String [] columns = new String[]{KEY_ROWID, KEY_NAME, KEY_TEL, KEY_EMAIL, KEY_COMMENTS};
        Cursor c = null;
         if(constraintPassed == "" || constraintPassed.length() == 0)
         {
             c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, KEY_NAME + " ASC", null); 
             c.close();

         }

         else
         {

            c = ourDatabase.query(DATABASE_TABLE, columns, KEY_NAME + " LIKE'" + constraintPassed + "%'", null, null, null, KEY_NAME + " ASC", null);

         }

        if( c != null)
            {
                c.moveToFirst();
                return c;

            }
        return null;
    }


    }

【问题讨论】:

  • constraintPassed == ""。 Java 101,字符串比较
  • 你关闭光标的事实当然没有帮助

标签: java android filter


【解决方案1】:

换行试试

cursorAdapter.getFilter().filter(s.toString());

与

yourclassname.this.cursorAdapter.getFilter().filter(s.toString());

在您的 onTextChanged 方法中。

【讨论】:

  • 没有。如果这可以解决错误,则该错误将是编译错误,而不是运行时错误。
【解决方案2】:

你应该在过滤后使用它:

((EfficientAdapter)listview.getAdapter()).notifyDataSetChanged();

EfficientAdapter 是您的适配器类。

希望这对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多