【问题标题】:Progressbar not showing up in GridView with custom view带有自定义视图的进度条未显示在 GridView 中
【发布时间】:2015-02-25 19:58:21
【问题描述】:

我有一个应用程序可以在网格视图中加载一些图像。我有一个这样的自定义视图:

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 适配器中使用它,如下所示:

图像适配器:

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 根本不显示,只有一个空白屏幕,然后图像完成加载并显示图像。

感谢任何帮助!

干杯!

【问题讨论】:

    标签: android gridview android-progressbar


    【解决方案1】:

    Picasso 在您的代码行中异步加载图像

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多