我目前正在尝试构建一个简单的设置 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/