从自定义对话框返回值到片段

时间:2012-04-24 12:38:47

标签: android dialog android-fragments

从片段中调用对话框

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的片段,我都可以启动对话框并检索值。

1 个答案:

答案 0 :(得分:0)

好的,我自己回答:我无法弄清楚如何做到这一点,所以我使用了这个解决方案: 我为每个对话框构建一个不同的类,它解析调用片段并调用其中的方法。这不是最好的解决方案,但它正在运作