2016-01-25 5 views
1

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

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

https://github.com/Valakias/PortFolioMovieApp

+0

Вы могли бы посмотреть в этом [например] (https://github.com/natangr/CheesecakeChallenge/tree/natan/app/src/main/java/com/example/naan/cheesecakechallenge). – Natan

ответ

0

Проблема заключается в том, что ширина ImageView является 0 (проверить его с помощью: Poster.getWidth();), поэтому вы не видите изображения, Выборочная адаптер отлично.

Вы можете это исправить, используя setLayoutParams установить ширину/высоту до imageView как на примере ниже:

if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = inflater.inflate(R.layout.gridview_item, null); 

    //Get screen size, and divide it by the number of columns of your grid view. 
    int width = getContext().getResources().getDisplayMetrics().widthPixels/2; 
    ((ImageView) convertView.findViewById(R.id.gridview_item_image)).setLayoutParams(new GridView.LayoutParams(width, width)); 
} 

ImageView Poster = (ImageView) convertView.findViewById(R.id.gridview_item_image); 
Picasso.with(getContext()) 
     .load(getItem(position)) 
     .fit() 
     .centerCrop() 
     .into(Poster); 

Или другой подход с использованием Picasso.resize

//Get screen size, and divide it by the number of columns of your grid view. 
int width = getContext().getResources().getDisplayMetrics().widthPixels/2; 
ImageView Poster = (ImageView) convertView.findViewById(R.id.gridview_item_image); 

Picasso.with(getContext()) 
    .load(getItem(position))  
    .resize(width, width) 
    .centerCrop() 
    .into(Poster); 

Вместо .centerCrop() вы можете использование .centerInside()

  • Использование.centerCrop()

enter image description here

  • Использование'.centerInside()' (Это будет соблюдать соотношение сторон изображения).

enter image description here

+1

Да, это было! Я думал, что, установив размер изображения в Match_parent, он позволит gridview решить размер, кажется, я был неправ. Большое спасибо, сэр, я застрял на этом, и ни один учебник не объяснял это, поэтому я действительно потерялся. – Valerio

+0

Что-то странное случается с размером изображения, когда внутри gridView/listView (я до сих пор не знаю, почему он не ведет себя как в любом другом представлении), но я счастлив, что это сработало для вас, просто из любопытства , какой из двух вариантов вы искали, centerInside или centerCrop? –

+0

Странно! Так что странные источники там действительно должны упоминать об этом:/Im в настоящее время следуют курсу Udacity Nanodegree, поэтому в конечном итоге мне придется отображать список плакатов, поэтому я выберу стиль, который выглядит лучше, я думаю. Мне действительно нужно прочитать дополнительную документацию об этих классах, прежде чем я буду работать над ними, избавит меня и других от нескольких головных болей. – Valerio

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