我想将数据从一个对话框传递到另一个对话框。 我有一个onCreateContextMenu对话框,用于显示listview
上的选项代码:
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
case R.id.update_item:
Object o1 = lv1.getItemAtPosition(info.position);
ItemDetails obj_itemDetails1 = (ItemDetails) o1;
/*Toast.makeText(getApplicationContext(),
"You have chosen : " + " " + obj_itemDetails1.getId(),
Toast.LENGTH_LONG).show(); */
Bundle arg= new Bundle();
arg.putString("key", obj_itemDetails1.getId());
showDialog(DIALOG_ID, arg);
return true;
}
return false;
}
我使用Bundle将此对话框中的数据发送到Alert Dialog。
代码:
protected final Dialog onCreateDialog(final int id, Bundle arg) {
Dialog dialog = null;
switch (id) {
case DIALOG_ID:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
arg.getString("key");// getting same value here
builder.setMessage(arg.getString("key"));
builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.setNegativeButton("Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.setTitle("Update Info");
dialog = alert;
break;
default:
}
return dialog;
}
}
来自
Bundle arg= new Bundle();
arg.putString("key", obj_itemDetails1.getId());
showDialog(DIALOG_ID, arg);
我每次根据所选位置发送新数据
但在警报对话框的arg.getString("key");
中我每次都获得相同的数据。即使我点击了新位置,数据也不会更新。
我使用了arg.remove("key");
和arg.clear();
,但它们无效。
我怎样才能做到这一点。或任何其他想法在AlertDialog中传递数据。
答案 0 :(得分:0)
您不应该使用showDialog
方法,因为它已被弃用,如果您检查了您将看到的javadoc:
对onCreateDialog(int,Bundle)的调用将使用相同的id 第一次调用给定的id 。
所以你不能那样更新那个值。
-
使用DialogFragment你可以只搜索对话框(如果它不存在则创建它)并通过方法传递新参数:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
YourDialog d = YourDialog.newInstance(...);
d.show(ft, YourDialog.class.getSimpleName());
然后搜索它:
YourDialog d = (YourDialog) getSupportFragmentManager().findFragmentByTag(YourDialog.class.getSimpleName())
if (d == null) {
//create a new dialog like before
}
d.setValue(yourValue)