2017-01-01 12 views
-2

私は、プロジェクト内でDialogFragmentを使用するために公式android developer docuthis oneに従っています。 DialogFragmentにデータを渡してマルチチェックリストを作成する必要があるので、DialogFragmentをnewInstanceメソッド(アイテムを渡す)でMainActivityの中から呼び出し、正しい結果を得ています。さて、私はDialogFragmentのデータも別の引数を渡したいと思いますが、それはすべての時間を渡す必要はないのでオプションでなければなりません。これを達成する方法はありますか?Android DialogFragment newInstanceオプションのパラメータ

EDIT:
ので、私は以下のコメントからのアドバイスを取り、セッターを作成し、私はDiagramFragmentに渡すことを望んだアイテムを可決しました。それはうまく働いた、悲しいことに私の問題を解決するのに役立たなかった。私が2番目のデータを渡したかったのは、ユーザーがDialogFragmentを開いて選択した後にDialogFragmentを再び開くと、最後の選択がなくなったと思ったからです。チェック済みのチェックボックスをDialogFragmentに渡してから、正しいインデックスをmSelectedItemsに設定することで、プログラムでチェックしたチェックボックスをチェックしたかったのですが、インデックスが正しく設定されていても、チェックボックスはチェックされません。

static MyDialogFragment newInstance(int num) { 
     MyDialogFragment f = new MyDialogFragment(); 

     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("num", num); 
     f.setArguments(args); 

     return f; 
} 

... 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    mSelectedItems = new ArrayList(); // Where we track the selected items 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    // Set the dialog title 
    builder.setTitle(R.string.pick_toppings) 
    // Specify the list array, the items to be selected by default (null for none), 
    // and the listener through which to receive callbacks when items are selected 
      .setMultiChoiceItems(R.array.toppings, null, 
         new DialogInterface.OnMultiChoiceClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which, 
         boolean isChecked) { 
        if (isChecked) { 
         // If the user checked the item, add it to the selected items 
         mSelectedItems.add(which); 
        } else if (mSelectedItems.contains(which)) { 
         // Else, if the item is already in the array, remove it 
         mSelectedItems.remove(Integer.valueOf(which)); 
        } 
       } 
      }) 
    // Set the action buttons 
      .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // User clicked OK, so save the mSelectedItems results somewhere 
        // or return them to the component that opened the dialog 
        ... 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        ... 
       } 
      }); 

    return builder.create(); 
} 
+1

標準joao2fast4u settersおそらく –

+1

ちょうどnullを渡すのはどうですか?利用できない場合は –

+0

@JawadLeWywadiが可能ですか?どうすればそのセッター関数を使用するのですか? 'DialogFragment newFragment = MyDialogFragment.newInstance(items);'それから 'newFragment.setMySetter(value);'?このような ?? – b101

答えて

3

オプションのパラメータは次のように行うことができます。

static MyDialogFragment newInstance() { 
     return newInstance(-1); 
} 

static MyDialogFragment newInstance(int num) { 
     MyDialogFragment f = new MyDialogFragment(); 

     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("num", num); 
     f.setArguments(args); 

     return f; 
} 

お持ちの場合は、何の数やnewInstance(300)を持っていない場合は、newInstance()を呼び出すことができます。あなたがすべてでIntを追加し、単にデフォルト値をチェックすることができませんでした代わりに-1を使用しての代わりに

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    int num = getArguments().getInt("num"); 
    if(num == -1) { 
     // no extra number 
    } else { 
     // do something with the extra number 
    } 

... 

(私はAPIドキュメントでその0を考える)

:他の側では

-2

私はそれを得たが、それはすでに答えた - ..私はGoogleで検索するとき、私はそれを見つけることができませんでした面白い

あなたが望むことを実行する最も簡単な方法はありますが、この方法を取ろうとします: setMultiChoiceItems()メソッドは、DialogFragmentの項目としてString []を受け取り、ブール値[]を受け取り、チェックされているかどうかを定義します。ない。私たちはこの配列を使用して選択肢を維持します。この配列はitems配列と同じ長さでなければならず、最初はfalseに設定されます。だから私がしなければならなかったすべてはboolean[] itemsCheckedを作成し、trueに正しいインデックスを設定し、再チェックし右のチェックボックスにした

..

元の質問Persist AlertDialog checked options - すべてのクレジット@へ

関連する問題