I did my share of research and discovered three cases related to my problem.
Solution 1
Decision 2
Decision 3
I am not saying that my business is unique or something like that, it is not that I cannot make my answers work for me with a cord.
PROBLEM: I have listviewone that is filtered using the edit texttop. However, when I click on the found item, I get the result of selecting another image. The text works fine, but images are a problem.
For example: the list contains lines with images A, B, C, D
When you search for C, you will get a result filtered as C. But clicking on it will display the image from A. It looks like the position does not change for the images, but uses the original position of the adapter ArrayList.
Any help would be appreciated.
My adapter:
public class SearchListAdapter extends BaseAdapter implements Filterable {
List<Model> mStringFilterList;
ValueFilter valueFilter;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
private Activity activity;
private LayoutInflater inflater;
private List<Model> modelItems;
private int mDefaultImageId;
public SearchListAdapter(Activity activity, List<Model> modelItems) {
this.activity = activity;
this.modelItems = modelItems;
mStringFilterList = modelItems;
}
public void setDefaultImageResId(int defaultImage) {
mDefaultImageId = defaultImage;
}
@Override
public int getCount() {
return modelItems.size();
}
@Override
public Object getItem(int location) {
return modelItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.search_list_row, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
NetworkImageView thumbNail = (NetworkImageView) convertView
.findViewById(R.id.thumbnail);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView rating = (TextView) convertView.findViewById(R.id.rating);
TextView genre = (TextView) convertView.findViewById(R.id.genre);
Model m = modelItems.get(position);
thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);
thumbNail.setTag(position);
title.setText(m.getTitle());
rating.setText(String.valueOf(m.getRating()));
String genreStr = "";
for (String str : m.getGenre()) {
genreStr += str + ", ";
}
genreStr = genreStr.length() > 0 ? genreStr.substring(0,
genreStr.length() - 2) : genreStr;
genre.setText(genreStr);
return convertView;
}
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
private class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
ArrayList<Model> filterList = new ArrayList<Model>();
for (int i = 0; i < mStringFilterList.size(); i++)
if ((mStringFilterList.get(i).getTitle().toUpperCase())
.contains(constraint.toString().toUpperCase())) {
Model m = new Model(mStringFilterList.get(i)
.getTitle(), mStringFilterList.get(i)
.getThumbnailUrl(), mStringFilterList.get(i)
.getRating(), mStringFilterList.get(i)
.getGenre());
filterList.add(m);
}
results.count = filterList.size();
results.values = filterList;
} else {
results.count = mStringFilterList.size();
results.values = mStringFilterList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
modelItems = (List<Model>) results.values;
notifyDataSetChanged();
}
}
}
Run codelv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String name = ((TextView) view.findViewById(R.id.title))
.getText().toString();
bitmap = ((Model) modelList.get(position)).getThumbnailUrl();
String rate = ((TextView) view.findViewById(R.id.rating))
.getText().toString();
String genres = ((TextView) view.findViewById(R.id.genre))
.getText().toString();
Intent intent = new Intent(SearchActivity.this, Details.class);
intent.putExtra(Title, name);
intent.putExtra("images", bitmap);
intent.putExtra(Rate, rate);
intent.putExtra(Genre, genres);
startActivity(intent);
}
});
}
Run codeOnItemclickListener:
source
share