我有一个应用程序,当按下按钮时,会出现一个包含列表的对话框,在选择列表中的某个项目后,会出现一个数字选择器对话框。我想要发生的是,在用户从数字选择器对话框中选择一个数字后,只会关闭数字选择器对话框,使对话框仍然显示。
到目前为止,这是我的代码。
这是第一个对话框(带列表的对话框)的代码:
private void generateUnitDialog(String[] productUnit) {
final CharSequence[] items = productUnit;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle Confirm action here
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle cancel action here
}
});
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
// Do something with the selection
Toast.makeText(getApplicationContext(),
"Item Click detected", Toast.LENGTH_SHORT)
.show();
generateQuantityDialog();
}
});
builder.setCancelable(false);
AlertDialog alert = builder.create();
alert.show();
}
当选择某个列表项时,将使用以下代码弹出numberpicker对话框:
public int generateQuantityDialog(){
final Dialog d = new Dialog(com.angelo.orderform.OrderForm.this);
d.setTitle("Choose Quantity");
d.setContentView(R.layout.dialog);
Button b1 = (Button) d.findViewById(R.id.button1);
Button b2 = (Button) d.findViewById(R.id.button2);
final NumberPicker np = (NumberPicker) d.findViewById(R.id.numberPicker1);
np.setMaxValue(100000);
np.setMinValue(1);
np.setWrapSelectorWheel(true);
//np.setOnValueChangedListener(this);
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//tv.setText(String.valueOf(np.getValue()));
d.dismiss();
}
});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
d.dismiss();
}
});
d.show();
return(np.getValue());
}
用户选择某个数字后,数字选择器对话框以及带有列表的对话框关闭。我希望列表中的对话框保持不变。
显然,setCancellable(false)没有帮助。
有什么想法吗?即使这是一种不同的方法,我也会敞开心扉。
答案 0 :(得分:0)
public class MainActivity extends Activity {
Dialog d;
AlertDialog.Builder builder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final CharSequence[] items = {"a","b","c"};
builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle Confirm action here
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Handle cancel action here
}
});
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
// Do something with the selection
Toast.makeText(getApplicationContext(),
"Item Click detected", Toast.LENGTH_SHORT)
.show();
generateQuantityDialog();
}
});
builder.setCancelable(false);
AlertDialog alert = builder.create();
alert.show();
}
public int generateQuantityDialog(){
d = new Dialog(this);
d.setTitle("Choose Quantity");
d.setContentView(R.layout.al);
Button b1 = (Button) d.findViewById(R.id.button1);
Button b2 = (Button) d.findViewById(R.id.button2);
// final NumberPicker np = (NumberPicker) d.findViewById(R.id.timePicker1);
// np.setMaxValue(100000);
// np.setMinValue(1);
// np.setWrapSelectorWheel(true);
//np.setOnValueChangedListener(this);
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//tv.setText(String.valueOf(np.getValue()));
d.dismiss();
AlertDialog alert = builder.create();
alert.show();
}
});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
d.dismiss();
AlertDialog alert = builder.create();
alert.show();
}
});
d.show();
return(54);
}
}
答案 1 :(得分:0)
您必须设置AlertDialog alert
变量全局。
根据您的要求,您可以取消或取消alertdialog
。
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//tv.setText(String.valueOf(np.getValue()));
d.dismiss();
alert.dismiss() ; or
alert.cancel();
}
});
您可以根据您的要求解除alertDialog。
就像选择第二个对话框一样。
答案 2 :(得分:0)
好吧我发现了,但我认为这是不好的做法。
我做的是放置了生成数字选择器对话框的代码,并将其放在generateQuantityDialog()
原来的位置,并在builder.show()
之后调用d.dismiss()
。
我会寻找一种解决方法,放弃这种方法。