android - fragment 警报框出现问题

标签 android xml android-fragments android-dialogfragment

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

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

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

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

以下是我的 Dialog 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/

相关文章:

java - DOM 避免保留空格

java - 如何将命名空间感知设置为 false?

java - 不幸的是,我的应用程序已在 Android 模拟器中停止

android - 回到默认 fragment

安卓 fragment : Lifecycle method *always* called when fragment is displayed?

android - 如何处理 RecyclerCollectionComponent 的项目之间的空间

android - 从条形图中删除 LegendText 及其小矩形

java - 如何产生不重复的随机数

android - 如果父 fragment 被移除,FragmentStatePagerAdapter 不会移除 fragment

android - 哪个更好?大量 Web 服务调用(SOAP 消息)或单个 Soap 消息中的大量数据?