2015-02-25 1 views
0

У меня есть приложение, которое загружает некоторые изображения в виде сетки. У меня есть настраиваемое представление сделал так:Пробег не отображается в GridView с пользовательским представлением

grid_item_view.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

<com.entu.artapp.utils.SquareImageView 
    android:id="@+id/gridItem_squareImageView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="centerCrop" 
    android:visibility="invisible"/> 

<ProgressBar 
    android:id="@+id/gridItem_progressBar" 
    style="?android:attr/progressBarStyleSmall" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:layout_centerInParent="true" 
    android:visibility="visible"/> 

</RelativeLayout> 

И я использовать его в моей GridView адаптер так:

ImageAdapter:

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    //ArrayList<Bitmap> bitmapList; 
    List<ParseObject> urlList; 
    private LayoutInflater inflater; 

public ImageAdapter(Context c, List<ParseObject> urlList) { 
    mContext = c; 
    this.urlList = urlList; 
    inflater = LayoutInflater.from(c); 
    //this.bitmapList = bitmapList; 
} 

public int getCount() { 
    return urlList.size(); 
} 

public Object getItem(int position) { 
    return null; 
} 

public long getItemId(int position) { 
    return 0; 
} 

// create a new ImageView for each item referenced by the Adapter 
public View getView(int position, View view, ViewGroup parent) { 

    View gridItem = view; 
    ViewHolder viewHolder; 

    if (gridItem == null) { 
     viewHolder = new ViewHolder(); 
     gridItem = inflater.inflate(R.layout.grid_view_item, parent, false); 
     viewHolder.squareImageView = (SquareImageView) gridItem.findViewById(R.id.gridItem_squareImageView); 
     viewHolder.progressBar = (ProgressBar) gridItem.findViewById(R.id.gridItem_progressBar); 
     gridItem.setTag(viewHolder); 
    } else { 
     viewHolder= (ViewHolder) view.getTag(); 
    } 

    //imageView.setImageBitmap(bitmapList.get(position)); 
    Picasso.with(mContext).load(urlList.get(position).get("thumbnailURL").toString()).resize(mContext.getResources().getDisplayMetrics().widthPixels/2, mContext.getResources().getDisplayMetrics().widthPixels/2).into(viewHolder.squareImageView); 
    viewHolder.progressBar.setVisibility(View.INVISIBLE); 
    viewHolder.squareImageView.setVisibility(View.VISIBLE); 
    Log.e("gridviewitem: ", "" + position); 
    return gridItem; 
} 

class ViewHolder { 
    SquareImageView squareImageView; 
    ProgressBar progressBar; 
    } 
} 

По какой-то причине ProgressBar вообще не отображается, только пустой экран и что изображение заканчивает загрузку, и изображение отображается.

Цените любую помощь!

Cheers!

ответ

1

Пикассо загружает изображение асинхронно и в вашей строке кода

viewHolder.progressBar.setVisibility(View.INVISIBLE); 

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

public View getView(int position, View view, ViewGroup parent) { 

View gridItem = view; 
ViewHolder viewHolder; 

if (gridItem == null) { 
    viewHolder = new ViewHolder(); 
    gridItem = inflater.inflate(R.layout.grid_view_item, parent, false); 
    viewHolder.squareImageView = (SquareImageView) gridItem.findViewById(R.id.gridItem_squareImageView); 
    viewHolder.progressBar = (ProgressBar) gridItem.findViewById(R.id.gridItem_progressBar); 
    gridItem.setTag(viewHolder); 
} else { 
    viewHolder= (ViewHolder) view.getTag(); 
} 

//imageView.setImageBitmap(bitmapList.get(position)); 

Picasso.with(context) 
     .load(imageUrl) 
     .into(myImage, new Callback() { 

      @Override 
      public void onSuccess() { 
       viewHolder.squareImageView.setVisibility(View.VISIBLE); 
       viewHolder.progressBar.setVisibility(View.INVISIBLE);   
      } 

      @Override 
      public void onError() { 
       viewHolder.progressBar.setVisibility(View.VISIBLE); 
       viewHolder.squareImageView.setVisibility(View.INVISIBLE); 
      } 
}).resize(mContext.getResources().getDisplayMetrics().widthPixels/2, mContext.getResources().getDisplayMetrics().widthPixels/2).into(viewHolder.squareImageView); 

Log.e("gridviewitem: ", "" + position); 
return gridItem; 
} 
+0

Done! Спасибо, добрый сэр! Это сработало. –