2014-10-22 3 views
2

У меня возникли проблемы, когда я просматриваю свой список, изображения, похоже, продолжают перезагружать себя, и это сильно задерживает список. Что я могу сделать, чтобы этого не произошло, я сделал это в своем списке раньше, и он этого не делает.Picasso Images Reloading on Scroll in listview

public class PostsAdapter extends BaseAdapter{ 
    public List<PostList> postList; 
    protected Context context; 

    public void add(PostList object,int position) { 
      postList.add(position,object); 
     } 

     public PostsAdapter(Context context) { 
      this.context = context; 
      postList = new ArrayList<PostList>(); 
     } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return postList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return postList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 
     if(convertView == null){ 
      convertView = LayoutInflater.from(context).inflate(R.layout.posts_list, null); 
      holder = new ViewHolder(); 
      holder.image = (ImageView)convertView.findViewById(R.id.postImage); 
      holder.username = (TextView)convertView.findViewById(R.id.postUsername); 
      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder)convertView.getTag(); 
     } 
     holder.username.setText(postList.get(position).user); 
     Picasso.with(context).load(postList.get(position).postPicture).into(holder.image); 

     return convertView; 
    } 
static class ViewHolder{ 
     ImageView image; 
     TextView username; 
    } 
+0

добавить 'Picasso.with (контекст) .load (postList.get (позиция) .postPicture) .into (держатель .image); 'in you' if (convertView == null) {...} 'удалить из другого места. – Rustam

+0

public void add (объект PostList, int position) { postList.add (позиция, объект); } что это такое, почему вы используете –

+0

public PostsAdapter (контекст контекста, ArrayList List) { this.context = context; postList = List; } использовать этот минус в адаптере –

ответ

0
public class PostsAdapter extends BaseAdapter 
    { 
     public List<PostList> postList; 
     protected Context context; 

    public PostsAdapter(Context context,ArrayList<PostList> List) 
    { 
     this.context = context; 
     postList = List; 
    } 

    @Override 
    public int getCount() 
    { 
    // TODO Auto-generated method stub 
    return postList.size(); 
    } 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return postList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    ViewHolder holder; 
    if(convertView == null){ 
     convertView = LayoutInflater.from(context).inflate(R.layout.posts_list, null); 
     holder = new ViewHolder(); 
     holder.image = (ImageView)convertView.findViewById(R.id.postImage); 
     holder.username = (TextView)convertView.findViewById(R.id.postUsername); 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder)convertView.getTag(); 
    } 
    holder.username.setText(postList.get(position).user); 
    Picasso.with(context).load(postList.get(position).postPicture).into(holder.image); 

    return convertView; 
} 
    static class ViewHolder 
{ 
    ImageView image; 
    TextView username; 
} 
+0

Это все еще не работает. – Rhynoboy2009

+0

проверить свой код деятельности, потому что проблема с возвратом не исходит от adaptetr. Я думаю, что вы можете использовать больше кода в android, также выписываете код actvity. –

+0

Что я имею в виду, повторяя каждый раз, когда я просматриваю список, пикассо загружает изображение снова. Я хочу загрузить изображение 1 раз и отобразить его без повторной загрузки изображения. – Rhynoboy2009

2

Когда пользователь запускает Fling MotionEvent, приложение загрузки изображений, он должен остановиться, концентрат прокрутки, а затем вернуться к загрузке изображений снова, как только прекращается движение. Эффект от этого почти волшебный.

Кроме того, Google предоставил код, чтобы показать, как это делается. Вы можете найти его здесь - https://github.com/google/iosched

Вот быстрый фрагмент того, как вы добавляете прослушиватель прокрутки для остановки и запуска очереди.

listView.setOnScrollListener(new OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(AbsListView listView, int scrollState) { 
     // Pause disk cache access to ensure smoother scrolling 
     if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) { 
      imageLoader.stopProcessingQueue(); 
     } else { 
      imageLoader.startProcessingQueue(); 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      // TODO Auto-generated method stub 
    } 
}); 
0

У меня была аналогичная проблема, и в сочетании советы от Detecting the scrolling direction in the adapter (up/down) и Fetch images with Callback in Picasso?. То есть я обнаружил, что пользователь прокручивал вверх или вниз, сравнивая последнюю позицию, к которой обратился адаптер, к текущей позиции и загружал следующие образы, с которыми они столкнулись, в пустую цель, чтобы согреть кеш.

0

Используйте размер с Picasso

    Picasso.with(context) 
       .load(imageURL) 
       .tag(context) 
       .placeholder(R.drawable.kanye8080s) 
       .error(R.drawable.stadiumarcadium) 
       .into(imageView) 
       .resize(x,y); 

// Это, безусловно, поможет