2010-12-29 10 views
0

でユーザーに表示しました。したがって、次のような呼び出しがあります。戻りデータは、関連するコードであるここでAndroidの

showDialog(ORDER_DIALOG); 
showDialog(COLUMNS_DIALOG); 
String orderBy = bundle.getString("column") + bundle.getString("order"); 

orderByはnullです。両方のダイアログが終了することが確認されるまで、orderByを待つ方法はありますか? dialog.isShowing()がfalseの場合でも、ダイアログが既に終了しているか、開始されていない可能性があります。

答えて

2

この場合、DialogInterface.OnClickListenerをオーバーライドしてフックし、その実装からorderByの値を設定する必要があります。 onCreateDialogに続いて

case SORT_MENU: 
    showDialog(ORDER_DIALOG); 
    break; 

、::実際には、これはより良いaproachです

onCreateDialogに再び
case ORDER_DIALOG: 
    AlertDialog.Builder orderBuilder = new AlertDialog.Builder(this); 
    orderBuilder.setTitle("Order"); 
    orderBuilder.setItems(order, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      String orderS; 
      if (order[which].equalsIgnoreCase("Ascending")) 
       orderS = "ASC"; 
      else 
       orderS = "DESC"; 

      bundle.putString("order", orderS); 
      dialog.dismiss(); 
      showDialog(COLUMNS_DIALOG); // <-- NEW!!! 
     } 
    }); 
    dialog = orderBuilder.create(); 
    break; 

、:

case COLUMNS_DIALOG: 
    AlertDialog.Builder columnBuilder = new AlertDialog.Builder(this); 
    columnBuilder.setTitle("Columns"); 
    columnBuilder.setItems(columns, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      bundle.putString("column", columns[which]); 
      dialog.dismiss(); 
      configureString(); // <-- NEW! 
     } 
    }); 
    dialog = columnBuilder.create(); 
    break; 

どこか:

private void configureString(){ 
    String orderBy = bundle.getString("column") + bundle.getString("order"); 
} 
関連する問題