gpt4 book ai didi

android - 仅显示一个 DialogFragment

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:47 25 4
gpt4 key购买 nike

我正在尝试设置一个对话框 fragment ,当我的 android 用户收到推送通知时弹出该对话框 fragment 。我下面的代码触发了对话框。我遇到的问题是,如果我的用户获得多次推送,他们将看到弹出多个对话框。

我想要的操作是只显示一个对话框,如果在当前对话框关闭之前弹出另一个对话框,则应销毁当前对话框,然后显示新对话框。

public abstract class BaseActivity extends ActionBarActivity {
public void showShiftsDialog(String time) {
String DIALOG_ALERT = "dialog_alert";

FragmentTransaction transaction = getFragmentManager().beginTransaction();
android.app.Fragment prev = getFragmentManager().findFragmentByTag(DIALOG_ALERT);

if (prev != null) transaction.remove(prev);
transaction.addToBackStack(null);

// create and show the dialog
DialogFragment newFragment = ShiftsDialogFragment.newInstance(time);
newFragment.show(getSupportFragmentManager().beginTransaction(), DIALOG_ALERT);
}
}

我已经尝试使用 android 文档中的代码 ( http://developer.android.com/reference/android/app/DialogFragment.html )。调试时,看起来 prev 始终为 null。

据我了解,我似乎将 DialogFragment 附加到 SupportFragmentManager:

newFragment.show(getSupportFragmentManager().beginTransaction(), DIALOG_ALERT);

当我尝试检查是否有任何当前 DialogFragment 时,我正在从 FragmentManager 检查:

 android.app.Fragment prev = getFragmentManager().findFragmentByTag(DIALOG_ALERT);

如果我尝试更改代码以尝试从 SupportFragmentManager 获取它,我会在需要 android.app.Fragment 的地方收到不兼容的类型错误,但我返回的是 android.support.v4.app.Fragment:

android.app.Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_ALERT);

如何管理我的 DialogFragment 以便在任何给定时间只显示一个?

工作解决方案

public void showShiftsDialog(String time) {
String DIALOG_ALERT = "dialog_alert";

android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
android.support.v4.app.Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_ALERT);

if (prev != null){
DialogFragment df = (DialogFragment) prev;
df.dismiss();
transaction.remove(prev);
}

transaction.addToBackStack(null);

// create and show the dialog
DialogFragment newFragment = ShiftsDialogFragment.newInstance(time);
newFragment.show(getSupportFragmentManager().beginTransaction(), DIALOG_ALERT);
}

最佳答案

您的问题似乎是 DialogFragment 不兼容。如果 ShiftsDialogFragmentandroid.support.v4.app.DialogFragment 的子类,您可以使用

android.support.v4.app.Fragment prev = getSupportFragmentManager().findFragmentByTag(DIALOG_ALERT);

关于android - 仅显示一个 DialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27241178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com