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 回答