0

私は EditText を持っています。これを使用して、人々がデータベースを検索できるようにします。今ではすべてうまく機能していますが、誰かが EditText に何かを入力すると、ListView が希望どおりに更新されません。

誰かが EditText に何かを入力すると、ListView が更新されるようにしたいのです。ただし、テキストを入力しても何も起こらないようです。

私のコードは次のとおりです。

@Override
protected void onResume() {
    searchText = (EditText)findViewById(R.id.search_text);
    ImageView searchView = (ImageView)findViewById(R.id.button_exercises_search);
    ImageView searchDoneView = (ImageView)findViewById(R.id.button_exercises_search_done);

    if (isSearching) {
        searchView.setVisibility(View.GONE);
        searchDoneView.setVisibility(View.VISIBLE);         
        searchText.setVisibility(View.VISIBLE);         
    }
    else {
        searchView.setVisibility(View.VISIBLE);
        searchDoneView.setVisibility(View.GONE);        
        searchText.setVisibility(View.GONE);        
    }

    searchText.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            String query = searchText.getText().toString();

            if (query.length() > 0) {
                cursor = datasource.fetchFilterExercises(dayDataID, query);
            }
            else {
                cursor = datasource.fetchAddExercises(dayDataID);
            }
            dataAdapter.changeCursor(cursor);

            return false;
        }
    });

    super.onResume();
}

2 つのボタンは、クリックすると検索用の EditText を表示/非表示にする単なるアイコンです。データソースが必要なデータを適切に取得することなどを知っています。 EditText にテキストを入力しても、何も起こらないようですsearchText。これを onCreate() に移動する必要がありますか? または?

4

3 に答える 3

5

searchText.addTextChangedListener(...)すべてのロジックを使用して、そのコールバックに移動することができafterTextChanged(...)ます。のドキュメントによるとView.OnKeyListener()

このビューでハードウェア キーが押されたときに呼び出されるコールバックを登録します。通常、ソフトウェア入力メソッドでキーを押しても、このリスナーのメソッドはトリガーされません。

これがあなたを助けることを願っています!

于 2013-01-07T05:19:23.580 に答える
1

((EditText) findViewById(R.id.editText)).addTextChangedListener(...) を使用して、すべてのロジックを移動することができます

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

                    @Override
                    public void onTextChanged(CharSequence s, int start,
                            int before, int count) {
         String query = searchText.getText().toString();

        if (query.length() > 0) {
            cursor = datasource.fetchFilterExercises(dayDataID, query);
        }
        else {
            cursor = datasource.fetchAddExercises(dayDataID);
        }
        dataAdapter.changeCursor(cursor);

                    }

                    @Override
                    public void beforeTextChanged(CharSequence s, int start,
                            int count, int after) {
                        // TODO Auto-generated method stub

                    }

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

                    }
                });

これがあなたを助けることを願っています..

于 2013-01-07T06:09:45.703 に答える
0

あなたがListViewを使用しているので、アダプターを使用している可能性があります。その場合は、この行を追加します mAdapter.notifyDataSetChanged();

于 2013-01-07T05:21:08.287 に答える