2014-09-26 2 views
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; 

     } 

} 

ответ

2

Попробуйте изменить метод getView ниже

@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(); 

         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()); 
         convertView.setTag(mViewHolder); 

       } else { 
         mViewHolder = (MyViewHolder) convertView.getTag(); 
       } 

       .. your other code goes here 
     } 
+0

Это работает, но теперь это дублирующие элементы после определенного количества пунктов. – Rhynoboy2009

+0

Что вы подразумеваете под дублированием? Можете ли вы объяснить, что на самом деле происходит? – AndyN

+0

У меня есть кнопка, в которой добавляются элементы в список, добавлю, скажем, 3 элемента, когда я снова нажму кнопку, он начнет их зацикливать, добавив эти 3 элемента сверху вниз в список просмотра снова и снова снова вместо того, чтобы добавить то, что я сказал ему добавить. – Rhynoboy2009

Смежные вопросы