你能得到日期选择器的标签吗

Can you get the tag of a date picker

我在 android 应用程序中打开不同的日期选择器片段。

碎片是这样打开的

DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(), "MY_TAG");

我实现了 onDateSet 方法,该方法具有选择的日期和 DatePicker 对象。现在我尝试从 DatePicker 对象中获取标签以检查显示了哪个选择器。

有方法datePicker.getTag(),但是这个returns null.

有没有办法获取在显示方法中提交的标签?

通过调用 datePicker.getTag(),您得到了错误的标签;这是 DatePicker 标签,而不是 DatePickerFragment 标签。

要查看正确的标签,只需在自定义 DatePickerFragment

中使用 getTag()

getTag() inside my Fragement class works fine. But how to I pass the tag back to my activity where I called show() My Fragement currently only contains the onCreateDialog method where I return a new DatePickerDialog instance

您可以将侦听器传递给 DatePickerFragment 构造函数,并在您设置日期时使用 Fragment 标记触发其回调。

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    interface OnDateAdjustedListener {
        void onDateAdjusted(String tag);
    }

    private OnDateAdjustedListener mOnDateAdjustedListener;


    // Constructor with a Listener
    public DatePickerFragment(OnDateAdjustedListener onDateAdjustedListener) {
        mOnDateAdjustedListener = onDateAdjustedListener;
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // .... Handle onCreateDialog

    }


    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {

        // .... Handle onDateSet

        // callback with fragment tag 
        mOnDateAdjustedListener.onDateAdjusted(getTag());
    }


}

并在你的activity中修改构造函数,实现接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener, DatePickerFragment.OnDateAdjustedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatePickerFragment dateFragment = new DatePickerFragment(this);


    }

    @Override
    public void onDateAdjusted(String tag) {
        Toast.makeText(this, tag, Toast.LENGTH_SHORT).show();
    }
}