Java 筛选后无法显示listview数据

Java 筛选后无法显示listview数据,java,android,Java,Android,我有一个listview适配器过滤器,它使用like语句正确过滤输入的文本 我遇到的问题是,当我的应用程序加载时,所有数据都显示在listview中。当应用过滤器时,它会正确地过滤到supplid文本,我不能做的是,一旦edittext再次为空(即删除搜索字符串),所有数据都会在listview中重新显示。 以下屏幕截图显示了该问题: 已加载列表: 过滤文本“a”。苹果按预期显示: 问题:删除“a”时,不会重新加载listview 过滤器的代码: itemNameEdit

我有一个listview适配器过滤器,它使用like语句正确过滤输入的文本

我遇到的问题是,当我的应用程序加载时,所有数据都显示在listview中。当应用过滤器时,它会正确地过滤到supplid文本,我不能做的是,一旦edittext再次为空(即删除搜索字符串),所有数据都会在listview中重新显示。

以下屏幕截图显示了该问题:

已加载列表:

过滤文本“a”。苹果按预期显示:

问题:删除“a”时,不会重新加载listview

过滤器的代码:

        itemNameEdit = (EditText) findViewById(R.id.inputName);

    showItems.setTextFilterEnabled(true);

    itemNameEdit.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 DBHandlerShop (this, null, null);

     cursorAdapter.setFilterQueryProvider(new FilterQueryProvider()
    {
        public Cursor runQuery(CharSequence constraint)
        {

            getCons.open();
            return getCons.getChanges(constraint.toString());


        }

    });
     showItems.setAdapter(cursorAdapter);
getChanges方法:

public Cursor getChanges(String constraintPassed) {

        String [] columns = new String[]{KEY_ROWSHOPID, KEY_ITEMSHOP, KEY_ITEMNUM, KEY_ITEMPRICE};
        Cursor c = null;
         if(constraintPassed == "" || constraintPassed.length() == 0)
         {
             c = ourDatabase.query(DATABASE_TABLESHOP, columns, null, null, null, KEY_ITEMSHOP + " ASC", null); 


         }

         else
         {

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

         }

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

            }
        return c;
    }

我注意到您正在使用:

if(constraintPassed == "" || constraintPassed.length() == 0)
决不能对字符串使用
==
,必须使用
equals()

但在这种情况下,您可以只使用
constraintPassed.length()==0
或:

if(constraintPassed.isEmpty())

(请阅读以了解
=
equals()
之间的区别)

添加游标适配器。notifyDataSetChanged()在on-textchange方法中刷新listview,在编辑文本时,您可能没有刷新listviewblank@Raghunandan我在textChanged方法中添加了DataSetChanged,并且遇到了相同的问题,即当edittext为空时,如何从过滤器中返回内容。当edittext为空时,显示整组原始值我觉得您的代码很好,所以我不确定发生了什么。但是永远不要这样做
constraintPassed==”
始终使用
equals()
,在这种情况下,
isEmpty()
length()==0
本身就可以了。