Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Alertdialog.Builder';s setItems()单击返回空对话框_Java_Android_Android Alertdialog - Fatal编程技术网

Java Alertdialog.Builder';s setItems()单击返回空对话框

Java Alertdialog.Builder';s setItems()单击返回空对话框,java,android,android-alertdialog,Java,Android,Android Alertdialog,我正在制作一个自定义的Alertdialog.Builder,并冒昧地扩展了danoz73所做的工作 我在类QustomDialogBuilder.java(AlertDialog.Builder的子类)中实现了自己的setItems()方法。由于我通过的项不是标准项,因此该方法标记为覆盖 public QustomDialogBuilder setItems(ArrayList<KMColor> items, final DialogInterface.OnClickLis

我正在制作一个自定义的Alertdialog.Builder,并冒昧地扩展了danoz73所做的工作

我在类
QustomDialogBuilder.java
(AlertDialog.Builder的子类)中实现了自己的
setItems()
方法。由于我通过的项不是标准项,因此该方法标记为
覆盖

    public QustomDialogBuilder setItems(ArrayList<KMColor> items, final DialogInterface.OnClickListener listener) {
    LinearLayout itemList = (LinearLayout) mDialogView.findViewById(R.id.items_list);//INFLATE THE LINEARLAYOUT INSIDE THE SCROLLVIEW
    Log.i("TAG","1 setItems items dialog is "+mDialog);//<--THIS IS NULL

    //HIDE UNUSED VIEWS SO THERE ISN'T A SPACE
    mDialogView.findViewById(R.id.customPanel).setVisibility(View.GONE);
    mDialogView.findViewById(R.id.contentPanel).setVisibility(View.GONE);

    for (int i = 0; i < items.size(); i++) {
        KMColor item = items.get(i);

        View listItem = inflateItem(item.name,item.color);
        listItem.setId(item.color);//VIEWS IDS CAN'T BE 0
        itemList.addView(listItem);
        Log.i("TAG","2 setItems items dialog is "+mDialog);//<--THIS IS NULL

        if (listener != null) {
            /*itemList <-- doesn't tell you what item was clicked*/
            listItem.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.i("TAG","3 setItems items dialog is "+mDialog);//<--STILL NULL 
                    listener.onClick(mDialog, v.getId());
                }
            });
        }
    }
    return this;
}
我相信我可以以不同的方式获取对对话框的引用,但是我真的很想理解为什么这不是我所期望的那样。如果能得到任何帮助,我将不胜感激。谢谢

编辑以下是我构建对话框的方法

public void showColorPicker(){

    QustomDialogBuilder alert = new QustomDialogBuilder(context);
    alert.setTitle("Pick Color");
    alert.setTitleColorWithResource(getResources().getColor(R.color.white));
    alert.setDividerColorWithResource(getResources().getColor(R.color.white));


    ArrayList<KMColor> items = new ArrayList<KMColor>();
    items.add(new KMColor("Black",Color.BLACK));
    items.add(new KMColor("Blue",Color.BLUE));
    items.add(new KMColor("Cyan",Color.CYAN));
    items.add(new KMColor("Green",Color.GREEN));
    items.add(new KMColor("Dark Grey",Color.DKGRAY));
    items.add(new KMColor("Light Grey",Color.LTGRAY));
    items.add(new KMColor("Magenta",Color.MAGENTA));
    items.add(new KMColor("Red",Color.RED));
    items.add(new KMColor("White",Color.WHITE));
    items.add(new KMColor("Yellow",Color.YELLOW));

    alert.setItems(items,new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Log.i("TAG", "setItems dialog is " + dialog);//<--NULL

        }
    });
    alert.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int id) {
            // if this button is clicked, just close
            // the dialog box and do nothing
            dialog.cancel();//<--WORKS FINE
        }
    });
    // create alert dialog
    AlertDialog alertDialog = alert.create();
    // show it
    alertDialog.show();
}
public void showColorPicker(){
QustomDialogBuilder alert=新QustomDialogBuilder(上下文);
警报。设置标题(“选择颜色”);
setTitleColorWithResource(getResources().getColor(R.color.white));
alert.setDividerColorWithResource(getResources().getColor(R.color.white));
ArrayList items=新建ArrayList();
添加(新KMColor(“黑色”,Color.Black));
添加(新的KMColor(“蓝色”,Color.Blue));
添加(新的KMColor(“青色”,Color.Cyan));
添加(新颜色(“绿色”,Color.Green));
添加(新KMColor(“深灰色”,Color.DKGRAY));
添加(新KMColor(“浅灰色”,Color.LTGRAY));
添加(新KMColor(“洋红”,Color.Magenta));
添加(新KMColor(“红色”,Color.Red));
添加(新的KMColor(“白色”,Color.White));
添加(新KMColor(“黄色”,Color.Yellow));
alert.setItems(items,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){

Log.i(“TAG”,“setItems对话框是”+dialog);//不好意思说我找到了答案。我的问题就在这里

 // create alert dialog
AlertDialog alertDialog = alert.create();
// show it
alertDialog.show();
我在我的Alertdialog.Builder上调用了
create()
,但是我没有在
QustomDialogBuilder.java
中覆盖
create()
,我只是覆盖了
show()
,因此我从来没有得到对话框的句柄!简单的修复!上面的代码现在只是

alert.show();
我现在也覆盖了
QustomDialogBuilder.java
中的
create()
。和
show()
一样,但现在我不会意外地追逐我的尾巴了

    @Override
public AlertDialog create() {
    if (mTitle.getText().equals("")) mDialogView.findViewById(R.id.topPanel).setVisibility(View.GONE);
    if (mMessage.getText().equals("")) mDialogView.findViewById(R.id.contentPanel).setVisibility(View.GONE);
    mDialog = super.create();
    return mDialog;
}
转到super.show();并检查它何时返回null实际上
show()
似乎从未被调用过?
alert.show();
    @Override
public AlertDialog create() {
    if (mTitle.getText().equals("")) mDialogView.findViewById(R.id.topPanel).setVisibility(View.GONE);
    if (mMessage.getText().equals("")) mDialogView.findViewById(R.id.contentPanel).setVisibility(View.GONE);
    mDialog = super.create();
    return mDialog;
}