0

ユーザーが入力したキーワードに従ってリストビューをフィルタリングする検索バーを実行しようとしていますが、コードにはエラーはありませんが、まったくフィルタリングされていません。何が問題なのかわかりますか?さまざまな方法を試しましたが、成功しませんでした。

oncreate

super.onCreate(savedInstanceState);
// set layout for the main screen
setContentView(R.layout.layout_main);

// load list application
mListAppInfo = (ListView)findViewById(R.id.lvApps);
EditText search = (EditText)findViewById(R.id.EditText01);

mListAppInfo.setTextFilterEnabled(true);

// create new adapter
final AppInfoAdapter adapter = new AppInfoAdapter(this, Utilities.getInstalledApplication(this), getPackageManager());


// set adapter to list view  
mListAppInfo.setAdapter(adapter);


search.addTextChangedListener(new TextWatcher() {

    public void afterTextChanged(Editable s) {

    }

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

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        Log.e("TAG", "ontextchanged");
       adapter.getFilter().filter(s); //Filter from my adapter
       adapter.notifyDataSetChanged(); //Update my view
    }
});

ArrayAdapter クラス

public class AppInfoAdapter extends ArrayAdapter<ApplicationInfo> {

    private Context mContext;
    PackageManager mPackManager;

    public AppInfoAdapter(Context c, List<ApplicationInfo> list, PackageManager pm) {
        super(c, 0, list);
        mContext = c;
        mPackManager = pm;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // get the selected entry
        ApplicationInfo entry = (ApplicationInfo) getItem(position);

        Log.e("TAG", entry.toString());

        // reference to convertView
        View v = convertView;

        // inflate new layout if null
        if(v == null) {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            v = inflater.inflate(R.layout.layout_appinfo, null);
        }

        // load controls from layout resources
        ImageView ivAppIcon = (ImageView)v.findViewById(R.id.ivIcon);
        TextView tvAppName = (TextView)v.findViewById(R.id.tvName);
        TextView tvPkgName = (TextView)v.findViewById(R.id.tvPack);

        // set data to display
        ivAppIcon.setImageDrawable(entry.loadIcon(mPackManager));
        tvAppName.setText(entry.loadLabel(mPackManager));
        tvPkgName.setText(entry.packageName);

        // return view
        return v;
    }
}
4

2 に答える 2

0

呼び出しadapter.getFilter().filter(s)はArrayAdapterのデフォルトのStringフィルタリングロジックを使用しますが、リストタイプがであるApplicationInfoため、ArrayAdapterはApplicationInfo#toString()アイテムの比較
に使用しており、フィルタリングしたいもののようには見えません

于 2012-07-26T11:33:56.137 に答える