10 個を超えるフィールドを持つフォーム フラグメントがあります。それらのそれぞれは、クリック イベントで、番号ピッカー ダイアログを表示します。では、どのフィールドがダイアログで値の選択を生成したかを特定するにはどうすればよいでしょうか? フラグメントでは、インターフェイスの実装により、単一のコールバックがあります。
public interface DialogClickListener {
void onDialogClick(DialogFragment dialog, Bundle args);
}
ダイアログを次のようにインスタンス化します。
private DialogClickListener clickListener;
public static NumberPickerDialogFragment newInstance(final int fiedlId) {
NumberPickerDialogFragment dialog = new NumberPickerDialogFragment();
// Here I can pass arguments to dialog with bundle
Bundle bundle = new Bundle();
bundle.putInt("fieldid", fieldId);
dialog.setArguments(bundle);
return dialog;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Here I can get the arguments
final int fieldId = getArguments().getInt("fieldid");
/* Here I can send the id back to fragment callback dialogclick
* This happen for real inside positive dialog button
*/
final Bundle bundle = new Bundle();
bundle.putInt("fieldid", fieldid);
clicklistener.onDialogClick(NumberPickerDialogFragment.this, bundle);
}
基本的に、フィールド ID をダイアログに送信し、それをフラグメント コールバックに送り返します。このようにして、フラグメント内で ID をオンにできます。このソリューションは、その目的に対して少し複雑で冗長すぎると思います。代替案を提案していただけますか?よろしくお願いします。