2013-04-16 2 views
0

Я хочу передавать данные из одного диалога в другой. у меня есть диалог onCreateContextMenu, чтобы показать опции на ListViewполучить обновление Значение в комплекте AlertDialog каждый раз

Код:

@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.

Код:

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

Вы не должны использовать метод showDialog, как это не рекомендуется, а также, если вы проверяете Javadoc вы увидите:

Вызов onCreateDialog (интермедиат, Bundle) будет производиться с тем же идентификатором первый раз это вызвано для данного 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)