0

我有一个Listview显示数据库中的所有数据。我目前有一个过滤器onTextChanged方法来过滤用户输入的字符串。在我覆盖onResume()活动类的方法之前,这非常有效。当用户单击后退按钮时,我已经使用它onResume()来重新加载。Listview

如前所述,没有onResume它可以完美运行。使用 onResume() 过滤器被阻塞。

这是我的代码:

public class view extends ListActivity {

    ImageButton searchButton;
    EditText searchName;
    ListView searchedListResults;
    long idToPass;
    String numReturned;
    String email;
    @Override
    protected void onResume() {
        super.onResume();

        list();
    }

    SimpleCursorAdapter cursorAdapter;
    DBHandler getCons;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);

        searchedListResults = (ListView) findViewById(android.R.id.list);

        list();

        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());
                // list();
                searchedListResults.refreshDrawableState();

            }

        });

        getCons = new DBHandler(this, null, null);

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

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

            }

        });
        searchedListResults.setAdapter(cursorAdapter);
    }

    private void list() {
        DBHandler DBsearchRef = new DBHandler(this, null, null);

        DBHandler search = new DBHandler(this, null, null);

        search.open();
        Cursor cursor = search.getData();
        search.close();
        startManagingCursor(cursor);

        String[] from = new String[] { DBsearchRef.KEY_NAME,
                DBsearchRef.KEY_TEL, DBsearchRef.KEY_EMAIL,
                DBsearchRef.KEY_COMMENTS };
        int[] to = new int[] { R.id.txtNameSet, R.id.txtContactSet,
                R.id.txtEmailSet, R.id.txtCommentSet };

        cursorAdapter = new SimpleCursorAdapter(this, R.layout.searchagain,
                cursor, from, to);
        searchedListResults.setAdapter(cursorAdapter);
    }
}
4

1 回答 1

2

如前所述,没有 onResume 它可以完美运行。使用 onResume() 过滤器被阻塞。

list()调用in onCreate()和 in的区别在于onResume()您只在onCreate(). 因此,当在其中创建一个新的 CursorAdapter 时,onResume()没有过滤器......


尖端

如果你搬家:

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

into list(),那么您的代码将按预期运行。


如果我删除了 onresume 方法,那么单击返回时我会得到一个空白的列表视图。

如果您在返回 Activity 时有数据“消失”,那么您必须自己将其保存在onSaveInstanceState()和中onRestoreInstanceState()。它们使用起来非常简单,这里是关于重新创建 Activity的开发人员指南。


最后,您不需要同时调用and ,它在两个地方都做同样的list()事情 目前它没有添加任何更改后的功能,因此您可以完全删除您的方法。onResume()onCreate()onCreate()onResume()

于 2013-03-18T14:29:52.783 回答