ANDROID - 在 DialogFragment 上设置 OnDismissListener
ANDROID - setOnDismissListener on a DialogFragment
我有一个 DialogFragment
用于在按下 button
时显示 TimePickerDialog
,我想将按钮的文本更改为新的时间设置。
我的问题是我无法通过 Activity
.
在 DialogFragment
上调用 setOnDismissListener
这是我的 DialogDragment
public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int hour = Application.getSettings().getInt("hour", 11);
int minute = Application.getSettings().getInt("minute", 11);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
FirstTimeLaunchSettingsActivity.hours = hourOfDay;
FirstTimeLaunchSettingsActivity.minutes = minute;
}
}
这就是 我如何称呼这个 DialogFragment
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(this.getFragmentManager(), "timePicker");
}
我已经考虑过在我的 activity
中制作一个 Handler
,这将 refresh
每秒 Activity
,但这不是我想要解决的方式问题。
我只想在关闭 DialogFragment
时将我的按钮设置为我输入的时间。
感谢您的帮助。
您可以覆盖 onDismiss(DialogInterface dialog)
方法,该方法将在 DialogFragment
被关闭时调用。您也可以使用内联覆盖从 activity 执行此操作:
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment() {
@Override
public void onDismiss(DialogInterface dialog){
// Add your code here
}
};
newFragment.show(this.getFragmentManager(), "timePicker");
}
您可以直接在已经实现的 onTimeSet
方法中执行此操作。您可以获得嵌入 TimePicker 视图的 activity 并更新按钮文本
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
FirstTimeLaunchSettingsActivity.hours = hourOfDay;
FirstTimeLaunchSettingsActivity.minutes = minute;
YourActivityClass activity = (YourActivityClass) getActivity();
activity.updateButton(hourOfDay + ":" + (minute<10?"0"+minute:minute));
}
然后,在您的 activity YourActivityClass
中,您可以照常更新按钮:
public void updateButton(String newText) {
Button yourButton = (Button) findViewById(R.id.yourButtonID);
yourButton.setText(newText);
}
I can't call setOnDismissListener
on the DialogFragment
from my
Activity.
可以,您只需在 activity
中实现接口
然后让你的 Activity 实现 OnDismissListener
public final class YourActivity extends AppCompatActivity implements DialogInterface.OnDismissListener {
@Override
public void onDismiss(final DialogInterface dialog) {
//Fragment dialog had been dismissed
}
}
然后只需覆盖片段中的 onDismiss listerenr 并调用 Activity。
public final class DialogFragmentImage extends DialogFragment {
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
}
这是 setOnDismissListener()
对话片段的另一种方法
FragmentManager fm = getFragmentManager();
YourDialogFragment dialog = new YourDialogFragment();
dialog.show(fm,"Dialog Name");
fm.executePendingTransactions();
dialog.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
//action when dialog is dismissed goes here
}
});
确保已执行 FragmentTransaction 工作。我们需要打电话
fm.executePendingTransactions();
否则调用setOnDismissListener()
时可能出现NullPointerException
。
我有一个 DialogFragment
用于在按下 button
时显示 TimePickerDialog
,我想将按钮的文本更改为新的时间设置。
我的问题是我无法通过 Activity
.
DialogFragment
上调用 setOnDismissListener
这是我的 DialogDragment
public class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int hour = Application.getSettings().getInt("hour", 11);
int minute = Application.getSettings().getInt("minute", 11);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
FirstTimeLaunchSettingsActivity.hours = hourOfDay;
FirstTimeLaunchSettingsActivity.minutes = minute;
}
}
这就是 我如何称呼这个 DialogFragment
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(this.getFragmentManager(), "timePicker");
}
我已经考虑过在我的 activity
中制作一个 Handler
,这将 refresh
每秒 Activity
,但这不是我想要解决的方式问题。
我只想在关闭 DialogFragment
时将我的按钮设置为我输入的时间。
感谢您的帮助。
您可以覆盖 onDismiss(DialogInterface dialog)
方法,该方法将在 DialogFragment
被关闭时调用。您也可以使用内联覆盖从 activity 执行此操作:
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment() {
@Override
public void onDismiss(DialogInterface dialog){
// Add your code here
}
};
newFragment.show(this.getFragmentManager(), "timePicker");
}
您可以直接在已经实现的 onTimeSet
方法中执行此操作。您可以获得嵌入 TimePicker 视图的 activity 并更新按钮文本
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
FirstTimeLaunchSettingsActivity.hours = hourOfDay;
FirstTimeLaunchSettingsActivity.minutes = minute;
YourActivityClass activity = (YourActivityClass) getActivity();
activity.updateButton(hourOfDay + ":" + (minute<10?"0"+minute:minute));
}
然后,在您的 activity YourActivityClass
中,您可以照常更新按钮:
public void updateButton(String newText) {
Button yourButton = (Button) findViewById(R.id.yourButtonID);
yourButton.setText(newText);
}
I can't call
setOnDismissListener
on theDialogFragment
from my Activity.
可以,您只需在 activity
中实现接口然后让你的 Activity 实现 OnDismissListener
public final class YourActivity extends AppCompatActivity implements DialogInterface.OnDismissListener {
@Override
public void onDismiss(final DialogInterface dialog) {
//Fragment dialog had been dismissed
}
}
然后只需覆盖片段中的 onDismiss listerenr 并调用 Activity。
public final class DialogFragmentImage extends DialogFragment {
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
}
这是 setOnDismissListener()
对话片段的另一种方法
FragmentManager fm = getFragmentManager();
YourDialogFragment dialog = new YourDialogFragment();
dialog.show(fm,"Dialog Name");
fm.executePendingTransactions();
dialog.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
//action when dialog is dismissed goes here
}
});
确保已执行 FragmentTransaction 工作。我们需要打电话
fm.executePendingTransactions();
否则调用setOnDismissListener()
时可能出现NullPointerException
。