2014-12-13 2 views
2

Я работаю над проектом, где есть пользовательский gridview, содержащий изображение и текстовое представление под ним. Я пытаюсь загрузить изображения с URL-адреса, используя библиотеку Picasso. Проблема я облицовки это:Использование библиотеки Picasso в пользовательском GridView в android

Когда изображения загружаются и я просматриваю сетку, изображения в нижней части списка сохраняют загрузку. Но когда я прокручиваю назад вверх, изображения, которые уже были загружены, снова загружаются Почему они не загружаются снова?

Мой код показан ниже:

адаптер в котором я устанавливаю изображения:

public class CustomGridAdapter extends BaseAdapter { 
    private Context mContext; 
    ArrayList<Sports_data> list; 
    LayoutInflater mInflater; 
    public ImageLoader imageLoader; 
     public CustomGridAdapter(Context c,ArrayList<Sports_data> list) { 
      mContext = c; 
      this.list=list; 
      mInflater= (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
      imageLoader=new ImageLoader(c); 
     } 

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

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return list.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) { 
     GridHolder holder=null; 
     if(convertView==null) 
      { 
      convertView = mInflater.inflate(R.layout.grid_single,parent,false); 
      holder=new GridHolder(); 
      holder.gridimage=(ImageView) convertView.findViewById(R.id.grid_image); 
      holder.txtgrid=(TextView) convertView.findViewById(R.id.grid_text); 
      convertView.setTag(holder); 
      } 
     else 
     { 
      holder = (GridHolder) convertView.getTag(); 
     } 
     //holder.gridimage.setImageResource(R.drawable.ic_launcher); 
     holder.txtgrid.setText(list.get(position).sports_name); 
     //imageLoader.DisplayImage(list.get(position).sports_image_url, holder.gridimage); 
     Picasso.with(mContext).load(list.get(position).sports_image_url).noFade().into(holder.gridimage); 

     return convertView; 
    } 

    public class GridHolder 
    { 
     ImageView gridimage; 
     TextView txtgrid; 
    } 

} 

Это линия, в которой я использовал Пикассо библиотека:

Picasso.with(mContext).load(list.get(position).sports_image_url).noFade().into(holder.gridimage); 

Пожалуйста, помогите !!

+0

Какие разрешения у вас есть в манифесте? – Niko

+0

Должен ли я написать внешнее хранилище? –

+1

Попробуйте добавить запись и чтение для внешнего хранилища. – Niko

ответ

1

В моем приложении я использую AsyncTask для загрузки изображений в GridView и выглядит точно так же, как вы описали

Я думаю, что это природа GridView/ListView для переработки изображений, которые не видны на экране. Если GridView/ListView не выполнял этого при прокрутке вверх и вниз, память, выделенная для вашего приложения, быстро закончилась, что приведет к сбою.

Решение для вашей проблемы - это, вероятно, кэширование загруженных (загруженных) изображений в память/диск, а затем их использование вместо перезагрузки.

Пожалуйста, ознакомьтесь с инструкцией, которую я придерживался: http://developer.android.com/training/displaying-bitmaps/index.html.

К сожалению, я пропустил часть с кешированием растровых изображений, поэтому я не могу предоставить вам какой-либо код.

-1

Вам необходимо создать конструктор в классе GridHolder. Там вам нужно вызвать findViewById() для каждого представления, которое вы хотите хранить в кеше. Сделайте примерно следующее:

class GridHolder { 
    ImageView gridimage; 
    TextView txtgrid; 

    public GridHolder(View itemView) { 
     gridimage= (ImageView) itemView.findViewById(R.id.grid_image); 
     txtgrid= (TextView) itemView.findViewById(R.id.grid_text); 
    } 
} 
Смежные вопросы