Java 未填充GridView内部警报对话框

Java 未填充GridView内部警报对话框,java,android,gridview,Java,Android,Gridview,我一直试图在我的代码中弹出一个带有网格视图的对话框,但该对话框只是显示为一个空白视图。我可以看到视图正在创建,但未填充。这是我的密码: public void chooseIcon(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); GridView gridView = new GridView(this); gridView.setNumColumns(3); gridView.

我一直试图在我的代码中弹出一个带有网格视图的对话框,但该对话框只是显示为一个空白视图。我可以看到视图正在创建,但未填充。这是我的密码:

  public void chooseIcon(){

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    GridView gridView = new GridView(this);
    gridView.setNumColumns(3);
    gridView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    gridView.setBackgroundColor(Color.WHITE);
    gridView.setColumnWidth(GridView.AUTO_FIT);
    gridView.setVerticalSpacing(5);
    gridView.setHorizontalSpacing(5);
    gridView.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
    IconImageAdapter adapter = new IconImageAdapter(this);
    gridView.setAdapter(adapter);
    builder.setTitle("Pick an icon");
    builder.setView(gridView);
    builder.show();
}
下面是IconImageAdapter类:

public class IconImageAdapter extends BaseAdapter{
.....
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(width/3, height/3));
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageView.setPadding(0, 0, 0, 0);
    } else {
        imageView = (ImageView) convertView;
    }

    switch(position){
        case 0:{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle, mContext.getTheme()));
            } else {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle));
            }
            break;
        }
        case 1:{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle, mContext.getTheme()));
            } else {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle));
            };
            break;
        }
        case 2:{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle, mContext.getTheme()));
            } else {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle));
            }
            break;
        }
        case 3:{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle, mContext.getTheme()));
            } else {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle));
            }
            break;
        }
        case 4:{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle, mContext.getTheme()));
            } else {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle));
            }
            break;
        }
        case 5:{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle, mContext.getTheme()));
            } else {
                imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.black_circle));
            }
            break;
        }
    }


    return imageView;
}
}

我的可绘制资源是圆圈的xml文件,在我的应用程序的其他地方使用,没有问题。

builder.setView(gridView)中设置视图时,需要放大视图
这样做:

LayoutInflater layoutInflater = getLayoutInflater();

builder.setView(layoutInflater.inflate(gridView.getId(), null));

这会奏效。

对于这个问题,我有一个更好的解决方案。首先,创建一个单独的xml布局(例如:gridview.xml),其中包含gridview设计和一个活动类(gridview.java),在这个类中设置gridview适配器,并在AndroidManifest文件中像这样注册这个gridview.java,然后在按钮单击事件中设置重定向gridview.java活动的意图