0

同様のステートメントを使用して、入力したテキストを正しくフィルタリングするリストビューアダプターフィルターがあります。

私が抱えている問題は、アプリが読み込まれると、すべてのデータがリストビューに表示されることです。フィルタが適用されると、提供されたテキストに正しくフィルタリングされます。編集テキストが再び空白になると(つまり、検索文字列が削除されると)、すべてのデータがリストビューに再表示されるようにすることはできません。

次のスクリーンショットは問題を示しています。

ロードされたリスト:

ここに画像の説明を入力してください

テキスト'a'をフィルタリングします。Appleは期待どおりに表示されました:

ここに画像の説明を入力してください

問題:「a」を削除すると、リストビューが再ロードされません。

ここに画像の説明を入力してください

フィルタのコード:

        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;
    }
4

1 に答える 1

0

あなたが使用していることに気づきました:

if(constraintPassed == "" || constraintPassed.length() == 0)

文字列には絶対に使用==しないでください。を使用する必要がありますequals()
ただし、この場合は、constraintPassed.length() == 0または次を使用できます。

if(constraintPassed.isEmpty())

(との違いについては、Javaで文字列を比較するにはどうすればよいですか?をお読みください。)==equals()

于 2013-03-13T20:29:31.637 に答える