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只是一个构建器。这并不重要,你不应该记住它,也不应该尝试使用它,而不是第一次创作。