R
Raidri
Ambitioniertes Mitglied
- 1
Hey,
Habe ein Problem beim Filtern einer ListView.
In meiner ListView sind verschiedene Objekte die über ein inputfeld beim drücken eines buchstabens gefiltert werden. FUnktioniert auch wunderbar.
Nur wenn ich jetzt die gefilterte Ansicht habe und dann auf das erste Item Klicke, so bekomme ich das item, das bei der nicht gefilterten Liste auf der ersten Position stand. Ich habe mir das beim Filtern eigentlich so gedacht, selbst wenn das item nun ganz oben steht, hat es weiterhin die position von der nicht gefilterten liste, aber da lag ich wohl Falsch und nun weiss ich nicht wie ich das ändern kann.
Hier mal mein Code vom Adapter:
Und hier der listener der auf ein ItemClick reagiert, ist eine ausgelagerte Klasse:
Habe ein Problem beim Filtern einer ListView.
In meiner ListView sind verschiedene Objekte die über ein inputfeld beim drücken eines buchstabens gefiltert werden. FUnktioniert auch wunderbar.
Nur wenn ich jetzt die gefilterte Ansicht habe und dann auf das erste Item Klicke, so bekomme ich das item, das bei der nicht gefilterten Liste auf der ersten Position stand. Ich habe mir das beim Filtern eigentlich so gedacht, selbst wenn das item nun ganz oben steht, hat es weiterhin die position von der nicht gefilterten liste, aber da lag ich wohl Falsch und nun weiss ich nicht wie ich das ändern kann.
Hier mal mein Code vom Adapter:
Code:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_projects, null);
}
Project project = filteredProjects.get(position);
if(project != null){
TextView topText = (TextView)v.findViewById(R.id.toptextproject);
TextView bottomText = (TextView)v.findViewById(R.id.bottomtextproject);
topText.setText(project.getName());
bottomText.setText((project.getCname()=="") ? "-" : project.getCname());
}
return v;
}
@Override
public Filter getFilter(){
if(this.filter == null){
filter = new ProjectFilter();
}
return filter;
}
@Override
public int getCount(){
return filteredProjects.size();
}
private class ProjectFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
ArrayList<Project> projects = new ArrayList<Project>();
FilterResults results = new FilterResults();
if(constraint.length() > 0){
for(Project project: allProjects){
if(project.getName().contains(constraint)){
projects.add(project);
}
}
results.values = projects;
results.count = projects.size();
}
else{
results.values = allProjects;
results.count = allProjects.size();
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredProjects = (ArrayList<Project>)results.values;
}
}
Code:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListView list = (ListView)parent;
this.command.setData(list.getItemAtPosition(position));
this.command.execute();
}