2016-01-07 1 views
0

Я изучаю загрузку изображений в GridView с помощью Picasso. Я попытался загрузить локальные изображения с возможностью рисования, но gridview показывает пустое. Я проверил решение на другом посту, но не нашел удовлетворительного ответа. Только найдено this решение, которое не работает. Любое предложение по загрузке локальных изображений было бы высоко оценено.Загрузка локальных изображений с использованием Picasso

Adapter to load images 
 

 
public class ImageAdapter extends BaseAdapter { 
 
    private Context mContext; 
 

 

 
    // Keep all Images in array 
 
    public Integer[] mThumbIds = {}; 
 

 

 
    public ImageAdapter(Context c){ 
 
     mContext = c; 
 
    } 
 

 

 
\t @Override 
 
    public int getCount() { 
 
     return mThumbIds.length; 
 
    } 
 

 
    @Override 
 
    public Object getItem(int position) { 
 
     return mThumbIds[position]; 
 
    } 
 

 
    @Override 
 
    public long getItemId(int position) { 
 
     return position; 
 
    } 
 

 
    @Override 
 
    public View getView(int position, View convertView, ViewGroup parent) {   
 
     ImageView imageView = new ImageView(mContext); 
 
     imageView.setImageResource(mThumbIds[position]); 
 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
 
     imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
 
     
 
     Picasso.with(mContext).load(mThumbIds[position]).into(imageView); 
 
     return imageView; 
 
    } 
 
}
Fragment having gridview 
 

 
public class GridFrag extends Fragment{ 
 

 
     public Integer[] mThumbIds = { R.drawable.brazil, R.drawable.colosseum, 
 
      R.drawable.eiffeltower, R.drawable.greatwall, R.drawable.pyramid, 
 
      R.drawable.statue, R.drawable.tajmahal }; 
 
\t 
 
\t @Override 
 
\t public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 
\t  
 
\t  //Inflate the layout for this fragment 
 
\t \t 
 
\t \t View v = LayoutInflater.from(getActivity()).inflate(R.layout.frag_grid, null); 
 
\t \t 
 
\t \t GridView gridview = (GridView) v.findViewById(R.id.gridview); 
 
\t  gridview.setAdapter(new ImageAdapter(this.getActivity())); 
 
\t   
 
\t  return v; 
 
\t } 
 

 
}

ответ

1

Вы должны переместить массив ImageAdapter. Ваш mThumbIds массив пустой в Адаптер.

Изменить код вы со следующими:

public class ImageAdapter extends BaseAdapter { 
private Context mContext; 


// Keep all Images in array 
public Integer[] mThumbIds = { R.drawable.brazil, R.drawable.colosseum, 
     R.drawable.eiffeltower, R.drawable.greatwall, R.drawable.pyramid, 
     R.drawable.statue, R.drawable.tajmahal }; 


public ImageAdapter(Context c){ 
    mContext = c; 
} 


@Override 
public int getCount() { 
    return mThumbIds.length; 
} 

@Override 
public Object getItem(int position) { 
    return mThumbIds[position]; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) {   
    ImageView imageView = new ImageView(mContext); 
    imageView.setImageResource(mThumbIds[position]); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 

    Picasso.with(mContext).load(mThumbIds[position]).into(imageView); 
    return imageView; 
} 

}

+1

Черт, хороший ответ. Я должен был подумать об этом сам. Большое спасибо человеку. @astuter –

0

Простой

Uri uri=Uri.fromFile(new File("YOUR IMAGE FILE PATH")); 
Picasso.with(mContext).load(uri).placeholder(R.drawable.ic_launcher).error(R.drawable.landscape_1).into("YOUR IMAGE VIEW"); 

заполнитель для показа образцов изображения, а реальное изображение загружается по Picasso.

ошибка: если загрузка изображения не удалась, это изображение должно быть показано