android - fragment 警报框的问题

标签 android xml android-fragments android-dialogfragment

我目前正在尝试构建一个简单的设置 fragment 警报框。

我已经构建了警告框的主体,但是我注意到没有使用实际的 Dialog 方法。此外,此 Dialog 方法替换了 onCreate() 方法。

我如何实际使用 Dialog 方法?在创建 Dialog 方法后,我似乎无法简单地调用它,因为它会作为错误出现。

我必须在某些 XML 中引用它吗? 如果是这样,那么哪个 XML - Fragment 的 XML 或其父 Activity 的 XML?

以下是我的对话框 fragment 的代码。我还没有修改它的 XML。

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;

public class ExceedingLimitFragment extends Fragment {

    public Dialog onCreateDialogExceed (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.exceeding_limit_title);
        builder.setMessage(R.string.exceeding_limit_message);
        builder.setPositiveButton(R.string.exceeding_limit_positive, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Intent ExceedingLimitPositiveIntent = new Intent (ExceedingLimitFragment.this.getActivity(), SettingsMenu.class);
                startActivity(ExceedingLimitPositiveIntent);
            }
        });
        builder.setNegativeButton(R.string.exceeding_limit_negative, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
               dialog.cancel();
           }
        });

        return builder.create();
    }

}

最佳答案

我注意到上述代码存在一些问题。 拳头:

public Dialog onCreateDialogExceed (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

似乎错了。您应该只调用您要覆盖的方法的 super 方法。在这种情况下, onCreateDialogExceed 是你自己的方法,所以你应该调用 onCreate() 。系统依赖于您在覆盖这些方法后立即调用它们,以便它知道它们已按正确的顺序调用。

ExceedingLimitFragment 是否需要显示 DialogFragment 还是实际上是 DialogFragment?如果答案是后者,请确保扩展该类而不是 Fragment。完成此操作后,将 onCreateDialogExceed() 重命名为 onCreateDialog(),这将在实际需要创建对话框时由系统调用。

为了显示对话框 fragment ,您需要从 Activity 或 fragment 中引用该对话框 fragment 并执行以下操作:

new ExceedingLimitFragment().show(getFragmentManager(), TAG);

如@dev.bmax 的回答

至于你的标题,finish()Activity的一个方法。 Fragments 或 DialogFragments 都不知道它,因此您的 IDE 提示它是有道理的。为了在 fragment 中使用它,请确保这样做

if(isAttached(){
   getActivity.finish();
}

关于android - fragment 警报框的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701221/

相关文章:

android - ScrollView 不适用于 Fragment 中的 ConstraintLayout

android - 如何将事件从一个 fragment 中的列表适配器发送到另一个 fragment ?

java - Xamarin 升级导致 "class file has wrong version 52.0, should be 50.0"错误

android - 是否需要明确支持AndroidX

c# - XDocument 获取 XML 文件的一部分

java - 如何使用 Xpath 从 XML 中正确传递对象

android - 如何在 Android 中向 EditBox 添加图标图像作为提示

java - 有没有办法解决局部变量可能没有被初始化

php - SimpleXML 中的 XPath 用于默认命名空间,无需前缀

java - setText() 和 setProgress() 未在 ViewPager 中更新