之前遇到這個問題,如果你使用以下語法時

mGrid.setAdapter(new ApplicationsAdapter(this, arylistInfo));
無法動態改變你的GridView 顯示的內容時,請看一下此Adapter是繼承於何物若是ArrayAdapter 是無法做到動態更新的,必須改為BaseAdapter再自已實作

原ArrayAdapter為


/**
     * GridView adapter to show the list of all installed applications.
     */
    private class ApplicationsAdapter extends ArrayAdapter<ApplicationInfo> {
        private Rect mOldBounds = new Rect();


        public ApplicationsAdapter(Context context, ArrayList<ApplicationInfo> apps) {
            super(context, 0, apps);
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final ApplicationInfo info = mApplications.get(position);


            if (convertView == null) {
                final LayoutInflater inflater = getLayoutInflater();
                convertView = inflater.inflate(R.layout.application1, parent, false);
            }


            Drawable icon = info.icon;
            
            
            
            if (!info.filtered) {
                //final Resources resources = getContext().getResources();
                int width = 48;//(int) resources.getDimension(android.R.dimen.app_icon_size);
                int height = 48;//(int) resources.getDimension(android.R.dimen.app_icon_size);


                final int iconWidth = icon.getIntrinsicWidth();
                final int iconHeight = icon.getIntrinsicHeight();


                if (icon instanceof PaintDrawable) {
                    PaintDrawable painter = (PaintDrawable) icon;
                    painter.setIntrinsicWidth(width);
                    painter.setIntrinsicHeight(height);
                }


                if (width > 0 && height > 0 && (width < iconWidth || height < iconHeight)) {
                    final float ratio = (float) iconWidth / iconHeight;


                    if (iconWidth > iconHeight) {
                        height = (int) (width / ratio);
                    } else if (iconHeight > iconWidth) {
                        width = (int) (height * ratio);
                    }


                    final Bitmap.Config c =
                            icon.getOpacity() != PixelFormat.OPAQUE ?
                                Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
                    final Bitmap thumb = Bitmap.createBitmap(width, height, c);
                    final Canvas canvas = new Canvas(thumb);
                    canvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, 0));
                    // Copy the old bounds to restore them later
                    // If we were to do oldBounds = icon.getBounds(),
                    // the call to setBounds() that follows would
                    // change the same instance and we would lose the
                    // old bounds
                    mOldBounds.set(icon.getBounds());
                    icon.setBounds(0, 0, width, height);
                    icon.draw(canvas);
                    icon.setBounds(mOldBounds);
                    icon = info.icon = new BitmapDrawable(thumb);
                    info.bmp=thumb;
                    
                    info.filtered = true;
                }
            }


            final TextView textView = (TextView) convertView.findViewById(R.id.label);                      
            //textView.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null);
            textView.setText(info.title);
            final ImageView image = (ImageView) convertView.findViewById(R.id.icon_app);
            image.setImageDrawable(icon);
            


            return convertView;
        }
    }

改為BaseAdapter為


public class Applications_Adapter extends BaseAdapter {


private static final String TAG = "Applications_Adapter";

private ArrayList<ApplicationInfo> arylistApp;
private Context myContext;
private LayoutInflater  mInflater;

int mGalleryItemBackground;

public Applications_Adapter(Context c, ArrayList<ApplicationInfo> app)
{
myContext =c;
arylistApp = app;
mInflater = LayoutInflater.from(myContext);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arylistApp.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return arylistApp.get(position);
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Rect mOldBounds = new Rect();
final ApplicationInfo info = arylistApp.get(position);

final ViewHolder holder;
        if (convertView == null) {
           
            convertView = mInflater.inflate(R.layout.application1, parent, false);
            holder = new ViewHolder();
            holder.icon = (ImageView) convertView.findViewById(R.id.icon_app);
            holder.txt = (TextView) convertView.findViewById(R.id.label);
            
            convertView.setTag(holder);
        }
        else
        {
         holder = (ViewHolder)convertView.getTag();
        }


        Drawable icon = info.icon;
        
        
        
        if (!info.filtered) {
            //final Resources resources = getContext().getResources();
            int width = 48;//(int) resources.getDimension(android.R.dimen.app_icon_size);
            int height = 48;//(int) resources.getDimension(android.R.dimen.app_icon_size);


            final int iconWidth = icon.getIntrinsicWidth();
            final int iconHeight = icon.getIntrinsicHeight();


            if (icon instanceof PaintDrawable) {
                PaintDrawable painter = (PaintDrawable) icon;
                painter.setIntrinsicWidth(width);
                painter.setIntrinsicHeight(height);
            }


            if (width > 0 && height > 0 && (width < iconWidth || height < iconHeight)) {
                final float ratio = (float) iconWidth / iconHeight;


                if (iconWidth > iconHeight) {
                    height = (int) (width / ratio);
                } else if (iconHeight > iconWidth) {
                    width = (int) (height * ratio);
                }


                final Bitmap.Config c =
                        icon.getOpacity() != PixelFormat.OPAQUE ?
                            Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
                final Bitmap thumb = Bitmap.createBitmap(width, height, c);
                final Canvas canvas = new Canvas(thumb);
                canvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG, 0));
                // Copy the old bounds to restore them later
                // If we were to do oldBounds = icon.getBounds(),
                // the call to setBounds() that follows would
                // change the same instance and we would lose the
                // old bounds
                mOldBounds.set(icon.getBounds());
                icon.setBounds(0, 0, width, height);
                icon.draw(canvas);
                icon.setBounds(mOldBounds);
                icon = info.icon = new BitmapDrawable(thumb);
                info.bmp=thumb;
                
                info.filtered = true;
            }
        }


       
        holder.txt.setText(info.title);
        holder.icon.setImageDrawable(icon);


        return convertView;
}

public class ViewHolder
{
ImageView icon;
TextView txt;
}


}

就可以動態新增了^^

狼翔月影 發表在 痞客邦 PIXNET 留言(0) 人氣()