1
У меня возникла проблема, когда иногда, когда либо новый элемент добавляется в список , либо пользователь прокручивает список, изображение меняется на что-то другое. Вот мой адаптер, как я могу исправить эту проблему?Изображения, изменяющиеся в ListView? (Parse & Picasso)
public class MyBaseAdapter extends BaseAdapter {
ArrayList<ListData> myList = new ArrayList<ListData>();
LayoutInflater inflater;
Context context;
String url;
ImageView iv;
ParseFile file;
public MyBaseAdapter(Context context, ArrayList<ListData> myList) {
this.myList = myList;
this.context = context;
inflater = LayoutInflater.from(this.context); // only context can also be used
}
@Override
public int getViewTypeCount() {
if (getCount() != 0)
return getCount();
return 1;
}
@Override
public int getCount() {
return myList.size();
}
@Override
public ListData getItem(int position) {
return myList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder mViewHolder;
View v = convertView;
if(convertView == null) {
convertView = inflater.inflate(R.layout.list_view_item, null);
mViewHolder = new MyViewHolder();
convertView.setTag(mViewHolder);
} else {
mViewHolder = (MyViewHolder) convertView.getTag();
}
mViewHolder.tvTitle = detail(convertView, R.id.userNameBody, myList.get(position).getTitle());
mViewHolder.tvDesc = detail(convertView, R.id.destinyMessageBody, myList.get(position).getDescription());
mViewHolder.image = detail(convertView, R.id.profile_picture, myList.get(position).getImage());
Pattern tagMatcher = Pattern.compile("[#]+[A-Za-z0-9-_]+\\b");
//Scheme for Linkify, when a word matched tagMatcher pattern,
//that word is appended to this URL and used as content URI
String newActivityURL = "content://com.rhynoapplications.askmethis.hashtaglookup/";
//Attach Linkify to TextView
Linkify.addLinks(mViewHolder.tvDesc, tagMatcher, newActivityURL);
return convertView;
}
// or you can try better way
private TextView detail(View v, int resId, String text) {
TextView tv = (TextView) v.findViewById(resId);
tv.setText(text);
TextView tv2 = (TextView) v.findViewById(R.id.userNameBody);
url = tv2.getText().toString();
return tv;
}
private ImageView detail(View v, int resId, int icon) {
iv = (ImageView) v.findViewById(resId);
ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
userQuery.whereEqualTo("username", url);
userQuery.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> results, ParseException e) {
// results has the list of users with a hometown team with a winning record
for(ParseObject obj: results){
file = obj.getParseFile("profilePicture");
}
Picasso.with(context).load(file.getUrl()).resize(200,200).placeholder(R.drawable.destiny_image).into(iv);
}
});
return iv;
}
public class MyViewHolder {
public TextView tvTitle, tvDesc;
public ImageView image;
}
}
Это работает, но теперь это дублирующие элементы после определенного количества пунктов. – Rhynoboy2009
Что вы подразумеваете под дублированием? Можете ли вы объяснить, что на самом деле происходит? – AndyN
У меня есть кнопка, в которой добавляются элементы в список, добавлю, скажем, 3 элемента, когда я снова нажму кнопку, он начнет их зацикливать, добавив эти 3 элемента сверху вниз в список просмотра снова и снова снова вместо того, чтобы добавить то, что я сказал ему добавить. – Rhynoboy2009