Hi!

Thiago Diniz wrote:
Why do you want to put an edittext, listview already have an keystroke
filter.
An editText is in die screen design, so i have to use it.
I have a similar problem because my listview is not filtering, even
implementing the toString method os the class from my custom Adapter.
Ialso have a ListView with a custom Adapter that extends ArrayAdapter.
It's a ArrayAdapter of the Type User
Have you solved the problem?


regards,
Anton



On Mar 25, 9:45 am, Anton Pirker <an...@ignaz.at> wrote:
Hi!

Kumar Bibek wrote:
What exactly are you trying to do? Can you please explain?
What i am trying to do:

I want to have a EditText and below my list with about 1200 Artistnames.
If the user enters something in the EditText i want to filter the
artists according to the entered text.

So if the user enters "sa" only artists with a name that contains "sa"
are displayed in the list. The list should be updated on every keystroke.

I think this is a fairly common problem and i hav read a lot of solution
on the internet, but it is just not working with my code (see below)
According to my Log.d() Message the artists are filtered, but the list
does not change, its not updated! Do you know whats wrong with my code?

Thanks!
Anton



Thanks and Regards,
Kumar Bibek
On Mar 25, 3:17 pm, Anton Pirker <an...@ignaz.at> 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
--
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



--
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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
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