3

次のような ArrayAdapter を使用して ListView を作成しています。

final ListView lv = (ListView) findViewById(R.id.listView1);

final EntryAdapter adapter = new EntryAdapter(this, items);
        lv.setAdapter(adapter);

アダプタは次のようになります。

this.items = items;
        vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ViewHolder holder;

        final Item i = items.get(position);
        if (i != null) {
            if(i.isSection()){
                SectionItem si = (SectionItem)i;
                v = vi.inflate(R.layout.list_item_section, null);


                v.setOnClickListener(null);
                v.setOnLongClickListener(null);
                v.setLongClickable(false);

                final TextView sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
                sectionView.setText(si.getTitle());
            }else{
                EntryItem ei = (EntryItem)i;
                v = vi.inflate(R.layout.carlistdetails, null);
                holder = new ViewHolder();
                final TextView name = (TextView)v.findViewById(R.id.name);
                final TextView location = (TextView)v.findViewById(R.id.location);
                final TextView speed = (TextView)v.findViewById(R.id.speed);
                final ImageView image = (ImageView) v.findViewById(R.id.imageView1);

                if (name != null) 
                    name.setText(ei.name);
                if(location != null)
                    location.setText(ei.location);
                if(speedandcontact != null)
                    speed.setText(ei.speed);
                    image.setImageResource(R.drawable.car);


            }
        }
        return v;
    }

各項目が 3 つの TextView と 1 つの ImageView で構成されるリストビューを作成しています。今、私はアダプタをフィルタリングしようとしています

TextWatcher filterTextWatcher = 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) {
        adapter.getFilter().filter(s);
    }

};


EditText filterText = (EditText) findViewById(R.id.sb);
filterText.addTextChangedListener(filterTextWatcher);

これは機能していますが、奇妙な結果が得られます (ほとんどの場合、すべての項目がリストから消えます)。アダプター/アイテムの名前フィールドのみでフィルタリングしたい。

それを行う方法についてのアイデアはありますか?

4

2 に答える 2

1
this issue as like as from that: http://stackoverflow.com/a/13156885/1752867
you can try use your custom adapter and filter.

コードで:

a: for (int i = 0; i < allObjectItemsArray.size(); i++) {
                T m = allObjectItemsArray.get(i);
                        // cast m to your class
                String fistnameAndLastName = ((your object class) m).getFirstName() + ((your object class) m).getLastName();

                if (fistnameAndLastName.toLowerCase().contains(constraint)) {
                    filteredItems.add(m);
                    continue a;
                }

            }

you can modify this line String fistnameAndLastName = ((your object class) m).getFirstName() + ((your object class) m).getLastName();

to 

like : String name = ((your object class) m).getName(); 
于 2012-10-31T12:39:13.337 に答える
0

このリンクは、カスタム フィルターを実装する方法を示しています。

http://www.mokasocial.com/2010/07/arrayadapte-filtering-and-you/

リストビューがオブジェクトの配列である場合は、これを行う必要があります。フィルタは、ビューのどの部分をフィルタリングするかを知る必要があります。

于 2012-10-07T04:26:53.673 に答える