0

こんにちは、アイテムをフィルタリングするためにリストビューに edittext を実装しています。この例に従っていますが、何も起こりません。それは機能せず、フィルタリングしようとすると、私が望むことをしません..これはedittextのコードの私の部分です:

ListView lv = (ListView) findViewById(android.R.id.list);
        lv.setTextFilterEnabled(true);
        lv.setAdapter(listadaptor);
        inputSearch.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changed the Text
                MainActivity.this.listadaptor.getFilter().filter(cs);   
            }

            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {
                // TODO Auto-generated method stub

            }

            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub                          
            }
        });
    };

私のリストビューは、デバイスにインストールされているすべてのアプリケーションを表示するリストです..リストをロードするためにこれを持っています:

private class LoadApplications extends AsyncTask<Void, Void, Void> {

public ProgressDialog progress = null;

@Override
protected Void doInBackground(Void... params) {
    applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA));
    listadaptor = new ApplicationAdapter(MainActivity.this,R.layout.snippet_list_row, applist);

    return null;
}

@Override
protected void onCancelled() {
    super.onCancelled();
}

protected void onDestroy() {
    if(progress!=null)
        if(progress.isShowing()){
        progress.dismiss();
        }

}

@Override
protected void onPostExecute(Void result) {
    setListAdapter(listadaptor);
    progress.dismiss();
    super.onPostExecute(result);
}

@Override
protected void onPreExecute() {
    progress = ProgressDialog.show(MainActivity.this, null,
            "Caricamento applicazioni in corso...");
    super.onPreExecute();
}

@Override
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
}

}

私のアダプターもそうlistadaptorです..誰かが私を助けることができますか? ありがとう

4

2 に答える 2

0

これを試してみてください..

        ArrayList<String> type_name_copy = new ArrayList<String>();
       inputSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        @Override
        public void afterTextChanged(Editable theWatchedText) {
            ArrayList<String> type_name_filter = new ArrayList<String>();

            String text = theWatchedText.toString();

            for (int i = 0; i < array.size(); i++) {

                if ((array.get(i).toLowerCase()).contains(text
                        .toLowerCase())) {
                    type_name_filter.add(array.get(i));

                }
            }

            type_name_copy = type_name_filter;

            listUpdate(type_name_copy);
        }
    });

}

public void listUpdate(ArrayList<String> data) {
    lv.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, data));

}
}
于 2013-10-23T15:17:44.073 に答える