2015-01-16 2 views
0

Я пытаюсь реализовать Picasso, чтобы помочь загружать изображения в GridView. В настоящее время приведенный ниже код работает без проблем, но элемент GridView просто пуст. Я знаю, что конкретный ImageView на самом деле там, потому что, если я его выберу и удерживаю, активируется selected_state drawable, как вы можете видеть в скриншоте this.Использование Picasso в GridView: ImageView есть, но без изображения

Не могли бы вы помочь мне найти проблему? Благодаря!

GalleryFragment.java:

//in onCreateView() 
v = inflater.inflate(R.layout.fragment_gallery, parent, false); 

GridView gridView = (GridView) v.findViewById(R.id.fragmentGalleryGridview); 
gridView.setAdapter(new GalleryAdapter(getActivity())); 
gridView.setOnScrollListener(new GalleryScrollListener(getActivity())); 

return v; 

GalleryAdapter.java простирается BaseAdapter:

public GalleryAdapter(Context mContext) 
{ 
    this.mContext = mContext; 
    inflater = LayoutInflater.from(mContext); 
    //get ArrayList<String> mPaths from SQLite database 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    SquareImageView view = (SquareImageView) convertView; 

    if (view == null) 
    { 
     view = new SquareImageView(mContext); 
     view.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    } 

    Picasso.with(mContext) 
      .load(mPaths.get(position)) 
      .fit() 
      .into(view); 

    return view; 
} 

SquareImageView.java:

public class SquareImageView extends ImageView 
{ 
    //three constructors 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); 
    } 
} 

fragment_gallery.xml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#eeeeee" 
    android:layout_marginTop="?android:attr/actionBarSize"> 

    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/fragmentGalleryGridview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_margin="5dp" 
     android:columnWidth="100dp" 
     android:numColumns="auto_fit" 
     android:verticalSpacing="5dp" 
     android:horizontalSpacing="5dp" 
     android:drawSelectorOnTop="true" 
     android:stretchMode="columnWidth"/> 

</FrameLayout> 
+0

проверить эту ссылку http: // www.101apps.co.za/articles/gridview-tutorial-using-the-picasso-library.html – Pavya

+0

@ user3676184 Я действительно уже прочитал эту статью, когда узнал, как реализовать Picasso, и мои методы очень похожи. Вы видите что-то другое, что может вызвать мою ошибку? – pez

+0

Я пробовал реализацию в ссылке user3676184, и моя реализация выше взята из официального Picasso github [здесь] (https://github.com/square/picasso/blob/master/picasso-sample/src/main/java /com/example/picasso/SampleGridViewAdapter.java), но оба они приводят к одной и той же проблеме. – pez

ответ

0

Это, как я успешно реализовал библиотеку Пикассо с GridLayout ... GridView требует использовать ListAdapter для деталей, и я была такая же проблема, но решить ее с помощью GridLayout вместо:

public class ImageHandler { 

    private static Picasso instance; 

    public static Picasso getSharedInstance(Context context) 
    { 
     if(instance == null) 
     { 
      instance = new Picasso.Builder(context).executor(Executors.newSingleThreadExecutor()).memoryCache(Cache.NONE).indicatorsEnabled(true).build(); 
      return instance; 
     } 
     else 
     { 
      return instance; 
     } 
    } 
} 

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

// imString = "http://filepath.file.jpg" as example 


     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     GridLayout grid = (GridLayout) findViewById(R.id.viewAllGrid); 
     grid.canScrollVertically(1); 
     ImageButton image; 

     for(int i = 0; i < itemsList.size(); i++){ 
      aContainer= (LinearLayout) inflater.inflate(R.layout.layout_container, null); 
      image = (ImageButton) aContainer.findViewById(R.id.imageViewOrButton); 
      ImageHandler.getSharedInstance(getApplicationContext()).load(imString).skipMemoryCache().fit().into(image); 
      grid.addView(aContainer); 
     } 

Вот layout_container

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingRight="10dp" 
    android:id="@+id/Container" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <ImageButton 
     android:layout_width="100dp" 
     android:layout_height="130dp" 
     android:background="@null" 
     android:id="@+id/seriesThumbnail"/> 

    <TextView 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textStyle="bold" 
     android:textColor="#ffffffff" 
     android:id="@+id/title" 
     android:autoText="false" 
     android:ellipsize="end" 
     android:maxLines="1" /> 

    <TextView 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:id="@+id/publisher" 
     android:text="Francis Chan" 
     android:maxLines="1" 
     android:ellipsize="end" /> 

</LinearLayout> 

А вот макет схемы viewAllGrid

<GridLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingLeft="20dp" 
      android:id="@+id/viewAllGrid" 
      android:layout_gravity="center_horizontal" 
      android:columnCount="3" 
      android:layout_weight=".8" 
      android:orientation="horizontal"> 
     </GridLayout> 
0

У меня была такая же проблема, и это потому, что мне не хватает разрешения

<!-- This is required for Picasso to work. --> 
<uses-permission android:name="android.permission.INTERNET"/> 

<!-- The following permissions are OPTIONAL. --> 

<!-- Used to adjust the work load depending on the type of network the device is using. --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
Смежные вопросы