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 <[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
--
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.