質問

フラグメントからダイアログフレグメントを開こうとしています。ダイアログフラグメントにはTimePickerがあり、TimePickerから呼び出し側のフラグメントまで、選択した時間と分を返します。これどうやってするの?私は質問から以下を試しましたが、それを作業することはできませんでした。誰かが以下の解決策のために疑似コードを与えてください(終わりに表示)

フラグメントからダイアログを表示するマイコード:

TimePickerFragment timepicker = TimePickerFragment.newInstance(1);
timepicker.show(getFragmentManager(), "timepickerfrag");
.

DialogFragmentのコード:

public class TimePickerFragment extends DisplayDialogFragment implements     View.OnClickListener {
private static final String ARG_PARAM1 = "param1";
private int mParam1;
private TimePicker time;
private Button bt1, bt2;
private TimePicker tm;

public static TimePickerFragment newInstance(int param1) {
TimePickerFragment fragment = new TimePickerFragment();
fragment.setStyle(DialogFragment.STYLE_NO_TITLE, 0);
Bundle args = new Bundle();
args.putInt(ARG_PARAM1, param1);
fragment.setArguments(args);
return fragment;
}

public TimePickerFragment() {
// Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getInt(ARG_PARAM1);
}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
 Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_time_picker_scheduler, container, false);
bt1 = (Button) view.findViewById(R.id.sched_time_pck_btn_ok);
bt2 = (Button) view.findViewById(R.id.sched_time_pck_btn_cancel);
tm = (TimePicker) view.findViewById(R.id.sched_dialog_time_picker);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
return view;
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sched_time_pck_btn_cancel:
dismiss();
break;
case R.id.sched_time_pck_btn_ok:
dismiss();
break;
}
}

}
.

DialogFragment

ダイアログを表示している場所からMyDialogFragment.ettargetFragment(この、my_request_code)を使用してから、ダイアログが終了したら、GetTargetFragment()を呼び出すことができます。OnActivityResult(getTargetRequestCode()、... )、および含有フラグメント内のOnActivityResult()を実装します。 特に活動を伴わないように、OnActivityResult()の乱用のようなようです。しかし、私はそれが公式のGoogleの人々によって推薦され、そして多分APIのデモでさえも見ました。 g / settargetFragment()が追加されたものだと思います。

役に立ちましたか?

解決

これは助けるべきです。ダイアログを表示しているFragmentに追加します。

// {@link CustomFragment} - current fragment which invokes dialog.
// {@link CustomDialogFragment} - DialogFragment implementation to show.
// REQUEST_GET_DATE - Request code for call.
CustomDialogFragment dialog = new CustomDialogFragment(getActivity());
dialog.setTargetFragment(CustomFragment.this, REQUEST_GET_DATE);
dialog.show(getActivity().getSupportFragmentManager(), "Dialog");

// Result handling
// REQUEST_GET_DATE - Constant int for request
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (resultCode == Activity.RESULT_OK) {
    switch (requestCode) {
      case REQUEST_GET_DATE:
        String extra = data.getStringExtra(DateTimeDialogFragment.EXTRA_DATE);
        // Handle response here..
        break;
    }
  }
}


// Inside CustomDialogFragment::onCreateDialog(Bundle savedInstanceState)
public Dialog onCreateDialog(Bundle savedInstanceState) {
  // Use the Builder class for convenient dialog construction
  Builder builder = new AlertDialog.Builder(mActivity);

  // Set the layout for the dialog
  builder.setView(mView);
  builder
    .setMessage("Title")
    .setPositiveButton("Set",
      new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
          // User ok the dialog
          // Important part!
          // -----
          Intent intent = getActivity().getIntent();
          intent.putExtra(EXTRA_DATE, getDateTime());
          getTargetFragment().onActivityResult(CustomFragment.REQUEST_GET_DATE, Activity.RESULT_OK, intent);
          // -----
          getDialog().hide();
        }
      })
      .setNegativeButton("Cancel",
        new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
            getDialog().cancel();
        }
      });
  // Create the AlertDialog object and return it
  return builder.create();
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top