android - 使用自定义 BaseAdapter 刷新 GridView 内容

标签 android android-gridview baseadapter

几天来我一直在寻找解决这个问题的方法,但我很困惑。

这是我目前所拥有的:

自定义 BaseAdapter 类:

        public static class ImageAdapter extends BaseAdapter {
        private static LayoutInflater mInflater;
        // Keep all Images in array
        private static Bitmap[] mThumbIds;
        private static int mViewResourceId, pos;
        private static CheckBox cb;
        // Constructor
        public ImageAdapter(Context ctx, int viewResourceId, Bitmap[] pics) {
            mInflater = (LayoutInflater) ctx
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mThumbIds = pics;
            mViewResourceId = viewResourceId;
        }

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return mThumbIds[position];
        }

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

        @SuppressWarnings("deprecation")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            convertView = mInflater.inflate(mViewResourceId, list, false);
            cb = (CheckBox) convertView.findViewById(R.id.select);
            Drawable background = new BitmapDrawable(mThumbIds[position]);
            cb.setBackgroundDrawable(background);
            pos = position;
            System.out.println("Setting checkbox set: "+imageIsDup[pos]);
            cb.setChecked(imageIsDup[pos]);
            System.out.println("Has checkbox been set? "+cb.isChecked());
            cb.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    if (cb.isChecked()) {
                        imageIsDup[pos] = true;
                    } else
                        imageIsDup[pos] = false;
                }
            });
            return convertView;
        }
    }

gridView设置代码:

final Dialog dialog = new Dialog(longOperationContext);
                    dialog.setContentView(R.layout.activity_list);
                    TextView no = (TextView) dialog
                            .findViewById(R.id.noOfDups);
                    no.setText("Found " + noOfImages
                            + " duplicates. Please verify.");
                    dialog.setTitle("Images Found");
                    dialog.setCancelable(false);
                    list = (GridView) dialog
                            .findViewById(R.id.grid_view);
                    ImageAdapter empty=new ImageAdapter(longOperationContext, R.layout.row, new Bitmap[0]);
                    imageAdapter = new ImageAdapter(
                            longOperationContext, R.layout.row, thumb);
                    dialog.show();
                    imageAdapter.notifyDataSetChanged();
                    list.invalidateViews();
                    list.setAdapter(empty);
                    list.setEmptyView(new View(longOperationContext));
                    list.invalidateViews();
                    list.setAdapter(imageAdapter);

我假设此代码会在开始时将 gridView 设置为空 View ,然后设置为适配器的内容。

我从文档中了解到,无法调用 removeView 函数,因为它们会抛出 Unsupported Exception。如何清除 GridView 的先前内容(如果有)并设置新内容?

最佳答案

在 Android 中刷新适配器元素的整个想法就是使用相同的对象数组重新填充它们。例如,如果我有一个像您的情况那样的 GridView,并且我想重新填充对象,您需要做的是先声明一个对象数组:

private ArrayList<Object> mMyObjects;

用数据填充它并创建您的适配器。

@Override
public void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);

       mMyObjects = new ArrayList<Object>();
       mMyObject.add("StringObject"); // just an example
       mMyAdapter = new MyCustomAdapter(this, mMyObject);
       mMyGridView.setAdapter(mMyAdapter);
}

所以我们填充对象数组并创建我们的适配器。在更新适配器/gridview 的 child 之前我们应该做的就是重新填充你的数组:

mMyObjects.clear();
mMyObjects.add("NewStringObject");

并调用:mMyAdapter.notifySetDataChanged(); 这样做 BaseAdapter 知道输出数据发生了变化,它正在重绘它的 View ,你的 ListView/GridView 将得到更新与新项目。

因此,在您的情况下,要更新您的 GridView,只需清除您的位图数组并重新填充它即可。

关于android - 使用自定义 BaseAdapter 刷新 GridView 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16455429/

相关文章:

java - 为什么我的 pbkdf2 实现如此缓慢(与 SQLCipher 相比)?

android - 如何在android中使用baseadapter刷新自定义 ListView

android - 未选中时更改 GridView 项目背景

java - 如何在 2 秒内不允许用户交互

java - 无法检索 Adapter 类中的 TextView

android - 如何在 BaseAdapter 上实现 getFilter?

javascript - 单击行时无法转到新 Activity

java - notification.setOngoing(true) 在 Android 8.1 中不起作用

android - 滑动菜单 - 从右到左

java - Android-如何用按钮显示空白的gridview