每次都在AlertDialog捆绑中获取更新值

时间:2013-04-16 09:59:43

标签: android bundle android-alertdialog

我想将数据从一个对话框传递到另一个对话框。 我有一个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中传递数据。

1 个答案:

答案 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)