Hi,

What exactly are you trying to do? Can you please explain?

Thanks and Regards,
Kumar Bibek

On Mar 25, 3:17 pm, Anton Pirker <[email protected]> wrote:
> Hi!
>
> I have a ListView with a custom Adapter that extends ArrayAdapter. It's
> a ArrayAdapter of Type Artist. (There are about 1200 artists in my list)
>
> Artist is a very small class that has a name and an id. The Artist Class
> has toString() overridden to return just the name.
>
> I have an EditText. The EditText has an TextChangeListener where i call
> .getFilter().filter(chars, callback) on my adapter.
>
> In the Filter.Filterlistener().onComplete() callback i print the count
> and it looks really good. As i type the count decreases. So it seams
> everything works as advertised, but the List stays the same. I tried to
> call artistAdapter.notifyDataSetChanged() to force the list to redraw,
> but nothing happens. [see 2.)]
>
> I am tinkering around for days now! I am desperate.. Hopefully someone
> can have a look on my code and tell me what i am doing wrong! How can i
> force the list to be redrawn?
>
> Thanks!
>
> (I have posted this question also on 
> stackoverflow:http://stackoverflow.com/questions/2505800/filtered-listview-not-updated)
>
> Here is what i have done:
>
> 1.) Defined a ListView and an EditText like this:
>
>     <EditText xmlns:android="http://schemas.android.com/apk/res/android";
>         android:id="@+id/list_search_text"
>         android:layout_width="fill_parent"
>         android:layout_height="35dip"
>         android:layout_below="@id/header">
>     </EditText>      
>     <ListView xmlns:android="http://schemas.android.com/apk/res/android";
>         android:id="@+id/list_search"
>         android:layout_width="fill_parent"
>         android:layout_height="fill_parent">
>     </ListView>
>
> 2.) Setup my ListView in the Activities onCreate():
>
>     private ListView listView = null;
>     private ArtistAdapter artistAdapter = null;
>
>     @Override
>     protected void onCreate(Bundle savedInstanceState) {
>         super.onCreate(savedInstanceState);
>         setContentView(R.layout.search_artists);
>
>         artistAdapter = new ArtistAdapter(this, R.layout.row, list); //
> 'list' is an ArrayList<Artist>
>
>         listView = (ListView) findViewById(R.id.list_search);
>         listView.setAdapter(artistAdapter);
>         listView.setFastScrollEnabled(true);
>         listView.setTextFilterEnabled(true);
>
>         listView.setOnItemClickListener(new OnItemClickListener() {
>             public void onItemClick(AdapterView<?> av, View v, int
> position, long id) {
>                 // do something
>             }
>         });
>
>         EditText txtSearch = (EditText) findViewById(R.id.list_search_text);
>         txtSearch.addTextChangedListener(new TextWatcher() {
>             public void afterTextChanged(Editable arg0) { }
>
>             public void beforeTextChanged(CharSequence arg0, int arg1,
> int arg2, int arg3) { }
>
>             public void onTextChanged(CharSequence chars, int start, int
> before, int count) {
>                 artistAdapter.getFilter().filter(chars, new
> Filter.FilterListener() {
>                     public void onFilterComplete(int count) {
>                         Log.d(Config.LOG_TAG, "filter complete! count: "
> + count);
>                         artistAdapter.notifyDataSetChanged();
>                     }
>                 });
>             }
>         });
>     }
>
> 3.) This is my ArtistAdapter in short. I added an remove() and add() method:
>
>     public class ArtistAdapter extends ArrayAdapter<Artist> implements
> SectionIndexer {
>         private List<Artist> items;
>
>         /* other stuff like overridden getView, getPositionForSection,
> getSectionForPosition and so on */
>
>         @Override
>         public void remove(Artist object) {
>             super.remove(object);
>             items.remove(object);
>         }
>
>         @Override
>         public void add(Artist object) {
>             super.add(object);
>             items.add(object);
>         }
>     }  
>
> 4.) My artist has also the toString() overridden:
>
>     public class Artist implements Comparable<Artist> {
>         public String   uid;
>         public String   name;
>
>         public Artist(String id, String name) {
>             this.uid = id;
>             this.name = name;
>         }
>
>         public int compareTo(Artist another) {
>             return this.name.compareToIgnoreCase(another.name);
>         }
>
>         @Override
>         public String toString() {
>             return this.name;
>         }
>     }
>
> --
> DI(FH) Anton Pirker
>
> ------------------------------
> cross platform mobile software
> burggasse 123/53
> a-1070 wien
> tel: +43 699 1234 0 456
> skype: antonpirker
>
> http://anton-pirker.at

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

To unsubscribe from this group, send email to 
android-developers+unsubscribegooglegroups.com or reply to this email with the 
words "REMOVE ME" as the subject.

Reply via email to