0

フラグメントから、ダイアログを呼び出します

private void showDateDialog(){

         FragmentTransaction ft = getFragmentManager().beginTransaction();
            DialogFragment newFragment = new DatePickerDialogFragment((Fragment)this,localCalendar);
            newFragment.show(ft, "dialog");
    }

次に、カスタム ダイアログで timesetlistener を呼び出します

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
         LayoutInflater inflater = LayoutInflater.from(getActivity());
            final View v = inflater.inflate(R.layout.time_dialog, null);

            timePicker=(TimePicker)v.findViewById(R.id.timePicker1);
            timePicker.setIs24HourView(true);
            if (data!=null) {
                timePicker.setCurrentHour(data.get(Calendar.HOUR_OF_DAY));
                timePicker.setCurrentMinute(data.get(Calendar.MINUTE));
          }
            timePicker.setScaleX(2);
            timePicker.setScaleY(2);

            return new TimePickerDialog.Builder(getActivity())
            .setTitle(R.string.timeDialog1)
            .setView(v)

            .setCancelable(true)
            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //validation code
                    OnTimeSetListener otsl=(OnTimeSetListener)mFragment;
                    otsl.onTimeSet(timePicker, timePicker.getCurrentHour(), timePicker.getCurrentMinute()); 
                }
            })
            .setNegativeButton(R.string.annulla, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                }).create();
    }

フラグメントでは、OnTimeSetListener を実装して値を取得します

 public void onTimeSet(TimePicker view, int hour, int minute) {
            localCalendar.set(Calendar.HOUR_OF_DAY, hour);
            localCalendar.set(Calendar.MINUTE, minute);
            updateTime(hour,minute);
    }

これは正常に機能しています。しかし、別のカスタム ダイアログで文字列を返したいのですが、実装するリスナーがわかりません。「onDismiss」を試しましたが、パラメーターを渡すことができません。OnValueChangeListener を試しましたが、パラメーターには 2 つの整数があるため (文字列が必要です!)。これは正しい方法ですか?つまり、リスナーを使用することです。

良いことは、onDateChange を実装する任意のフラグメントから、ダイアログを起動して値を取得できることです。

4

1 に答える 1

0

わかりました私は自分で答えます:私はそれを行う方法がわからないので、この解決策を使用しました:呼び出し元のフラグメントを解析し、その中のメソッドを呼び出すダイアログごとに異なるクラスを構築します。それは最善の解決策ではありませんが、機能しています

于 2012-05-17T13:15:47.507 に答える