Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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
Android 如何使用onClickListener关闭对话框_Android_Button_Dialog_Onclick - Fatal编程技术网

Android 如何使用onClickListener关闭对话框

Android 如何使用onClickListener关闭对话框,android,button,dialog,onclick,Android,Button,Dialog,Onclick,我已经将AlertDialog.Builder设置为final 我在对话框中有一个按钮,单击该按钮时,为用户进行购买,然后关闭。我对“结束”部分有意见。下面是按钮的代码: Button buyButton = new Button(context); LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100,

我已经将
AlertDialog.Builder
设置为
final

我在对话框中有一个按钮,单击该按钮时,为用户进行购买,然后关闭。我对“结束”部分有意见。下面是按钮的代码:

    Button buyButton = new Button(context);
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100, 0.0f);
    buyButton.setLayoutParams(buttonParams);
    buyButton.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View view){
            if (STOCK_TO_PURCHASE.size() != 0) {
                Player thisPlayer = players[getPlayerIndexByPlayOrder(CURRENT_TURN)];
                purchaseStock(thisPlayer);
                buyStockDialog.dismiss();
            } else {
                buyStockDialog.dismiss();
            }
        }
    });
IDE告诉我必须输入
buyStockDialog
。但如果我键入它,我会收到一个运行时错误,告诉我无法将
buyStockDialog
键入
DialogInterface

最好的处理方法是什么

我已经有了一个自定义的
onBackPressed
方法,并考虑强制应用程序模拟正在按下的后退按钮。你认为最好的解决办法是什么

根据请求,AlertDialog.Builder的声明行:

    ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme);
    final AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw);
    buyStockDialog.setTitle("Buy Stock: ");
根据第二次请求,完整对话框的代码和布局:

public void buyStock(View view){
    Context context = getApplicationContext();
    ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme);
    final AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw);
    buyStockDialog.setTitle("Buy Stock: ");

    //create ScrollView to hold everything
    ScrollView scrollView = new ScrollView(context);

    //generate content for dialog       
    LinearLayout dialogContainer = new LinearLayout(context);
    dialogContainer.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 350, 1);
    params.gravity = Gravity.CENTER;
    dialogContainer.setLayoutParams(params);
    dialogContainer.setPadding(15, 15, 0, 15);
    dialogContainer.setBackgroundColor(Color.WHITE);

    //each hotel stock options
    for (int i = 0; i < hotels.size(); i++) {
        Hotel testHotel = hotels.get(i);
        testHotel.setPrice(200);
        View stockPicker = getStockPicker(testHotel);
        LinearLayout.LayoutParams pickerParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 75, 1.0f);
        pickerParams.gravity = Gravity.LEFT;
        stockPicker.setLayoutParams(pickerParams);
        dialogContainer.addView(stockPicker);
        stockPicker.setBackgroundColor(0xffffff);
    }

    LinearLayout scrollWrapper = new LinearLayout(context);
    scrollWrapper.addView(scrollView);
    scrollWrapper.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300, 1.0f));

    scrollView.addView(dialogContainer);
    scrollView.setLayoutParams(params);

    LinearLayout dialogLayout = new LinearLayout(context);
    dialogLayout.setOrientation(LinearLayout.VERTICAL);
    dialogLayout.setBackgroundColor(Color.WHITE);

    Button buyButton = new Button(context);
    LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100, 0.0f);
    buyButton.setLayoutParams(buttonParams);
    buyButton.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View view){
            if (STOCK_TO_PURCHASE.size() != 0) {
                Player thisPlayer = players[getPlayerIndexByPlayOrder(CURRENT_TURN)];
                purchaseStock(thisPlayer);
                buyStockDialog.dismiss();
            } else {
                buyStockDialog.dismiss();
            }
        }
    });

    dialogLayout.addView(scrollWrapper);
    dialogLayout.addView(buyButton);

    buyStockDialog.setView(dialogLayout);

    buyStockDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {         
        @Override
        public void onCancel(DialogInterface dialog) {
            int numInterations = STOCK_TO_PURCHASE.size();
            for (int i = 0; i < numInterations; i++) {
                STOCK_TO_PURCHASE.remove(0);
            }
        }
    });

    buyStockDialog.show();

}
公开作废股票(查看){
Context=getApplicationContext();
ContextThemeWrapper ctw=新的ContextThemeWrapper(this,R.style.AppTheme);
final AlertDialog.Builder buyStockDialog=新建AlertDialog.Builder(ctw);
setTitle(“买入股票:”);
//创建滚动视图来保存所有内容
ScrollView ScrollView=新的ScrollView(上下文);
//为对话框生成内容
LinearLayout dialogContainer=新的LinearLayout(上下文);
dialogContainer.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams params=新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,350,1);
参数重力=重心;
dialogContainer.setLayoutParams(参数);
设置填充(15,15,0,15);
dialogContainer.setBackgroundColor(Color.WHITE);
//每家酒店的股票期权
对于(int i=0;i
AlertDialog与具有dismise()函数的AlertDialog之间存在差异。以及AlertDialog.Builder,它是警报对话框的生成器模式。当您即将显示您调用的对话框时

buyStockDialog.create()


返回的值就是您必须调用的值

在声明对话框时,必须执行以下操作:

ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.AppTheme);
AlertDialog.Builder buyStockDialog = new AlertDialog.Builder(ctw);
buyStockDialog.setTitle("Buy Stock: ");
final Dialog dialog = builder.create();
在您想要关闭对话框的单击侦听器中,您将称之为:

dialog.dismiss();

buyStockDialog是AlertDialog.Builder吗?是否可以包含buyStockDialog的声明行。添加声明行此按钮是对话框布局的一部分?您能否在此提供显示方法代码的完整对话框?这是一项有效的工作,但buyStockDialog.create().Disclose()不起作用。它不会给我任何错误,但也不会关闭对话框。这是因为现在你正在创建一个从未显示的新对话框,然后关闭该对话框。在显示对话框的位置。。。已调用buyStockDialog.create().show()的位置。这就是你需要注意的对象。buyStockDialog只是一个构建器。这并不重要,你不应该记住它,也不应该尝试使用它,而不是第一次创作。