Android:从DialogFragment调用Activity的功能

Android:从DialogFragment调用Activity的功能,第1张

概述我在从DialogFragment调用我的Activity函数时遇到问题.我的MainActivity中有一些公共函数,我需要调用这些函数才能在DialogFragment中完成一些计算.每次我尝试使用getActivity()调用函数时.出现问题“无法解决方法”.这是我在MainActivity中调用DialogFragment的方式:FragmentMan

我在从DialogFragment调用我的Activity函数时遇到问题.我的MainActivity中有一些公共函数,我需要调用这些函数才能在DialogFragment中完成一些计算.每次我尝试使用getActivity()调用函数时.出现问题“无法解决方法”.

这是我在MainActivity中调用DialogFragment的方式:

FragmentManager fm = getSupportFragmentManager();        DialogWeekly dialogWeekly = new DialogWeekly();        dialogWeekly.show(getFragmentManager(), "fragment_dialogWeekly");

这就是DialogFragment的样子.我在出现上述问题的地方添加了两个注释行:

public class DialogReminder extends DialogFragment implements AdapterVIEw.OnItemSelectedListener {//--- Static Variables -----------------------------------------------------------------------//private static final String MY_PREFS = "my_preferences";private static Activity activity;private static TimePicker timePicker;private static VIEw dialogReminderVIEw;//--- Integer Variables ----------------------------------------------------------------------//private Integer weekday;//--- String Variables -----------------------------------------------------------------------//private String weekdayString;//--- Other Variables ------------------------------------------------------------------------//private SharedPreferences sharedPreferences;/** * Empty constructor required for DialogFragment */public DialogReminder() { }/** * Called when a fragment is first attached to its activity. * onCreate(Bundle) will be called after this * @param activity Activity that is attached to this fragment */public voID onAttach(Activity activity) {    super.onAttach(activity);}//--- OverrIDe Functions ---------------------------------------------------------------------//@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) {    return inflater.inflate(R.layout.dialog_weekly, container);}@NonNull@OverrIDepublic Dialog onCreateDialog(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    sharedPreferences = getActivity().getSharedPreferences(MY_PREFS, Context.MODE_PRIVATE);    return createalertDialog();}@OverrIDepublic voID onItemSelected(AdapterVIEw<?> parent, VIEw vIEw, int pos, long ID) {    Integer selectedItem = parent.getSelectedItemposition();    weekdayString = parent.getItemAtposition(pos).toString();    // Here is the problem: savePreferences -> cannot resolve method    getActivity().savePreferences("spinnerSelectionWeekday", String.valueOf(selectedItem));    weekday = selectedItem + 2;    if (weekday == 8) {        weekday = 1;    }}@OverrIDepublic voID onnothingSelected(AdapterVIEw<?> parent) {    // Another interface callback}//--- General Activity Functions -------------------------------------------------------------///** * * @return */private AlertDialog createalertDialog() {    AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());    alert.setTitle(getResources().getString(R.string.optionReminder));    alert.setVIEw(dialogReminderVIEw);    alert.setNegativebutton(getResources().getString(R.string.cancel), new DialogInterface.OnClickListener() {        @OverrIDe        public voID onClick(DialogInterface dialog, int which) {            dialog.cancel();        }    });    alert.setPositivebutton(getResources().getString(R.string.ok), new DialogInterface.OnClickListener() {        @OverrIDe        public voID onClick(DialogInterface dialog, int which) {            setReminder();            dialog.cancel();        }    });    setElementsGUI();    return alert.create();}/** * */private voID setElementsGUI() {    Spinner spinner = (Spinner) dialogReminderVIEw.findVIEwByID(R.ID.reminderWeekdaySpinner);    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromresource(getActivity(),            R.array.reminderSpinnerArray, androID.R.layout.simple_spinner_item);    // Specify the layout to use when the List of choices appears    adapter.setDropDownVIEwResource(androID.R.layout.simple_spinner_dropdown_item);    spinner.setonItemSelectedListener(this);    spinner.setAdapter(adapter);    spinner.setSelection(Integer.parseInt(sharedPreferences.getString("spinnerSelectionWeekday", "0")));}//--- button Functions -----------------------------------------------------------------------///** * */private voID setReminder() {    // Here is the problem: all functions with getActivity() -> cannot resolve method    getActivity().checkReminder();    getActivity().setWeekdayReminder(weekday);    getActivity(("hour", String.valueOf(timePicker.getCurrentHour()));    getActivity().savePreferences("minute", String.valueOf(timePicker.getCurrentMinute()));    getActivity().checkReminder();    String hour = String.valueOf(getActivity().getHour());    if (hour.length() < 2) {        hour = "0" + hour;    }    String minute = String.valueOf(getActivity().getMinute());    if (minute.length() < 2) {        minute = "0" + minute;    }    String time = hour + ":" + minute;    String message = getResources().getString(R.string.reminderToast, weekdayString, time);    Toast toast = Toast.makeText(getActivity().getApplicationContext(), message, Toast.LENGTH_LONG);    toast.show();}

}

解决方法:

尽管getActivity()在运行时返回MainActivity,但是编译器必须假定它只是一个Activity对象,并且这些方法不存在(因为Activity没有这些方法).因此,编译器错误.

您需要做的是将Activity转换为MainActivity对象,如下所示:

((MainActivity)getActivity()).savePreferences(...
总结

以上是内存溢出为你收集整理的Android:从DialogFragment调用Activity的功能全部内容,希望文章能够帮你解决Android:从DialogFragment调用Activity的功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1088211.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存