【问题标题】:How to get the data from DialogFragment in ChildViewHolder?如何从 ChildViewHolder 中的 DialogFragment 获取数据?
【发布时间】:2016-11-04 11:35:50
【问题描述】:

我有可扩展的回收站视图。 在这个回收站视图中,我有 ChildViewHolder,其中调用了以下方法:

public void showDatePickerDialog() {
    DatePickerFragment datePickerFragment= new DatePickerFragment();
    SelectionActivity activity = (SelectionActivity) mContext;
    datePickerFragment.show(activity.getSupportFragmentManager(), "datePicker");
}

我的 DatePickerFragment:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

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

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);

        // Create a new instance of DatePickerDialog and return it
        return datePickerDialog;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        TimePickerFragment newFragment = new TimePickerFragment();
        newFragment.show(getActivity().getFragmentManager(), "timePicker");
    }
}

在 DatePickerFragment 中,我也在 DatePickerFragment 关闭后立即调用 TimePickerFragment。

我的问题是:如何在 ChildViewHolder 中获取日期信息(也是时间信息)?

【问题讨论】:

  • 您可以创建自己的监听器。在 DatePickerFragment 中设置监听器并在 ChildViewHolder 中处理响应。我不知道这种机制是否真的是最好的,但为什么不尝试
  • @PavliukR 你是对的,谢谢!看来这是最好的方法。我已经添加了答案。

标签: android android-dialogfragment android-datepicker


【解决方案1】:

解决方案是在 DatePikerFragment 中创建自己的监听器:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    private DateDialogFragmentListener dateDialogFragmentListener;

    public void setDateDialogFragmentListener(DateDialogFragmentListener dateDialogFragmentListener) {
        this.dateDialogFragmentListener = dateDialogFragmentListener;
    }

    public interface DateDialogFragmentListener{
        void onDateSelected(int year, int month, int dayOfMonth);
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);

        return datePickerDialog;
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        dateDialogFragmentListener.onDateSelected(year, month, dayOfMonth);
        TimePickerFragment newFragment = new TimePickerFragment();
        newFragment.show(getActivity().getFragmentManager(), "df");
    }
}

并在 ChildViewHolder 中设置此侦听器:

public void showDatePickerDialog() {
        DatePickerFragment newFragment = new DatePickerFragment();
        newFragment.setDateDialogFragmentListener(new DatePickerFragment.DateDialogFragmentListener(){

            @Override
            public void onDateSelected(int year, int month, int dayOfMonth) {
                timeTextView.setText(year + "/" + month + "/" + dayOfMonth);
            }
        });

         newFragment.show(activity.getSupportFragmentManager(), "datePicker");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2012-09-19
    • 2014-08-15
    相关资源
    最近更新 更多