ListViewにフィルターを適用する必要があります。たくさんのドキュメントを読みましたが、フィルターのルールがわかりません。フィルタは機能しますが、何をしているのかわかりません。
私はこのクラスを使用します:
public class ArtistasActivity extends Activity {
private EditText filterText = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View title = getWindow().findViewById(android.R.id.title);
View titleBar = (View) title.getParent();
titleBar.setBackgroundColor(Color.rgb(181, 9, 97));
setContentView(R.layout.artistas_l);
final ListView m_listview = (ListView) findViewById(R.id.listView1);
ListAdaptor adaptor = new ListAdaptor(this, R.layout.artistas_l, loadArtistas());
m_listview.setFastScrollEnabled(true);
m_listview.setScrollingCacheEnabled(true);
m_listview.setAdapter(adaptor);
m_listview.setTextFilterEnabled(true);
// Search
filterText = (EditText) findViewById(R.id.search_box);
filterText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
public void afterTextChanged(Editable text) {
Log.d("search", ""+text);
ListAdaptor adaptor = (ListAdaptor) m_listview.getAdapter();
adaptor.getFilter().filter(text);
adaptor.notifyDataSetChanged();
}
});
そしてListAdaptorは典型的です:
private class ListAdaptor extends ArrayAdapter<Artista> {
private ArrayList<Artista> artistas;
public ListAdaptor(Context context, int textViewResourceId, ArrayList<Artista> items) {
super(context, textViewResourceId, items);
this.artistas = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.artistas_list, null);
}
Object content = null;
Artista o = artistas.get(position);
TextView tt = (TextView) v.findViewById(R.id.ArtistTopText);
tt.setText(o.getNombre());
v.setClickable(true);
v.setFocusable(true);
v.setOnClickListener(myClickListener);
return v;
}
}
アプリケーションは機能し、テキストエディタに書き込むとリストはフィルタリングされますが、Rを入力すると、DaniまたはDiegoの名前が表示されます...
名前を返すためだけにtoStringメソッドをオーバーライドします。
@Override
public String toString() {
return this.nombre;
}
助けのためのThx!! Rgds