1

私のプログラムでは、 で検索していくつかの連絡先を検索しようとしてListViewEditTextます。
コードは次のとおりです。

private ArrayList<String> listContacts=new ArrayList<String>();
private ArrayList<String> sortContacts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.myprofile_layout);


    listViewContacts = (ListView) findViewById(R.id.listViewContacts);
    editTextSearch = (EditText) findViewById(R.id.editTextSearch);
    listContacts.add("User1");
    listContacts.add("Albert");
    listContacts.add("lol");
    listContacts.add("str");
    sortContacts = listContacts;
editTextSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                sortContacts.clear();
                for (int i = 0; i < listContacts.size(); i++) {

                    if(editTextSearch.getText().length() <= listContacts.get(i).length()){
                        if(listContacts.get(i).toLowerCase().contains(editTextSearch.getText().toString().toLowerCase()))
                        {
                            sortContacts.add(listContacts.get(i));
                        }
                    }
                }

                updateAdapter();

            }

プログラムが動かない: 文字の挿入ListView消去.
デバッグすると、listContactsリストが (size()=0)であることがわかります。何か案は?

4

2 に答える 2

0

これは、listView のadapterをフィルタリングするための推奨される方法ではありません。

アダプターにFilterableを実装させ、次のようなものを使用することになっています。

mAdapter.getFilter().filter(queryText);

この方法を使うメリットなど、詳しくはGoogleのレクチャー「listViewの世界」をご覧ください。

于 2013-07-10T12:18:26.687 に答える
0

交換:

sortContacts = listContacts;

と:

sortContacts.addAll(listContacts);

ここでわかるように、 を使用すると、行のために両方のリスト ( & )sortContacts.clear();がクリアされます。sortContactslistContactssortContacts = listContacts;

また、Rajitha のコメントで述べたようにListViewupdateAdapter()(私には見えない)のアダプターを設定しない限り、 s のListView変更で更新されません。ArrayList

于 2013-07-10T10:51:17.267 に答える