片段警报框出现问题
Trouble with Fragment Alert Box
我目前正在尝试构建一个简单的设置片段警报框。
我已经构建了警告框的主体,但是我注意到并没有使用实际的 Dialog 方法。此外,此 Dialog 方法取代了 onCreate()
方法。
如何实际使用对话框方法?我似乎无法在创建 Dialog 方法后简单地调用它,因为它会作为错误出现。
我是否必须在某些 XML 中引用它?
如果是,那么哪个 XML - 片段的 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 静态 class MyAlertDialogFragment 扩展 DialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}
}
public void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string.alert_dialog_two_buttons_title);
newFragment.show(getFragmentManager(), "dialog");
}
public void doPositiveClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Positive click!");
}
public void doNegativeClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Negative click!");
}
The activity creating this fragment may have the above methods to show the dialog and receive results from it, This is how you can define your dialog using dialog fragment and get the call backs in your project.
希望对您有所帮助。
通常,您将 DialogFragment 子类化。要启动它,您需要实例化对话框片段并调用它的显示方法。
new ExceedingLimitFragment().show(getFragmentManager(), TAG);
注意:您应该使用 getFragmentManager() 或 getSupportFragmentManager(),具体取决于您子类化的 DialogFragment 版本(android.app.DialogFragment 或 android.support.v4.app.DialogFragment)
您可以创建方法 showDialog() 并将这段代码放入其中..这就是创建一个简单的警报对话框的方法,它有两个选项 ok 或 cancel
new AlertDialog.Builder(context)
.setTitle("Add title ")
.setMessage("Add some message")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
希望能帮到你!
我注意到上述代码存在一些问题。
拳头:
public Dialog onCreateDialogExceed (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
好像不对。您应该只调用要覆盖的方法的 super
方法。在这种情况下,onCreateDialogExceed
是您自己的方法,因此您应该调用 onCreate()
。系统依赖于您在重写这些方法后立即调用它们,以便它知道它们已按正确顺序调用。
ExceedingLimitFragment
需要显示 DialogFragment
还是实际上是 DialogFragment
?如果答案是后者,请确保扩展 class 而不是 Fragment
。完成后,将 onCreateDialogExceed()
重命名为 onCreateDialog()
,这将在实际需要创建对话框时由系统调用。
为了显示对话框片段,您需要从您的 Activity 或片段中引用该片段并执行类似以下操作:
new ExceedingLimitFragment().show(getFragmentManager(), TAG);
如@dev.bmax 的回答
你的标题finish()
是Activity
的一个方法。 Fragments 或 DialogFragments 都不知道它,因此您的 IDE 抱怨它是有道理的。为了在片段中使用它,请确保执行
if(isAttached(){
getActivity.finish();
}
我目前正在尝试构建一个简单的设置片段警报框。
我已经构建了警告框的主体,但是我注意到并没有使用实际的 Dialog 方法。此外,此 Dialog 方法取代了 onCreate()
方法。
如何实际使用对话框方法?我似乎无法在创建 Dialog 方法后简单地调用它,因为它会作为错误出现。
我是否必须在某些 XML 中引用它? 如果是,那么哪个 XML - 片段的 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 静态 class MyAlertDialogFragment 扩展 DialogFragment {
public static MyAlertDialogFragment newInstance(int title) {
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
}
}
public void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string.alert_dialog_two_buttons_title);
newFragment.show(getFragmentManager(), "dialog");
}
public void doPositiveClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Positive click!");
}
public void doNegativeClick() {
// Do stuff here.
Log.i("FragmentAlertDialog", "Negative click!");
}
The activity creating this fragment may have the above methods to show the dialog and receive results from it, This is how you can define your dialog using dialog fragment and get the call backs in your project.
希望对您有所帮助。
通常,您将 DialogFragment 子类化。要启动它,您需要实例化对话框片段并调用它的显示方法。
new ExceedingLimitFragment().show(getFragmentManager(), TAG);
注意:您应该使用 getFragmentManager() 或 getSupportFragmentManager(),具体取决于您子类化的 DialogFragment 版本(android.app.DialogFragment 或 android.support.v4.app.DialogFragment)
您可以创建方法 showDialog() 并将这段代码放入其中..这就是创建一个简单的警报对话框的方法,它有两个选项 ok 或 cancel
new AlertDialog.Builder(context)
.setTitle("Add title ")
.setMessage("Add some message")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
希望能帮到你!
我注意到上述代码存在一些问题。 拳头:
public Dialog onCreateDialogExceed (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
好像不对。您应该只调用要覆盖的方法的 super
方法。在这种情况下,onCreateDialogExceed
是您自己的方法,因此您应该调用 onCreate()
。系统依赖于您在重写这些方法后立即调用它们,以便它知道它们已按正确顺序调用。
ExceedingLimitFragment
需要显示 DialogFragment
还是实际上是 DialogFragment
?如果答案是后者,请确保扩展 class 而不是 Fragment
。完成后,将 onCreateDialogExceed()
重命名为 onCreateDialog()
,这将在实际需要创建对话框时由系统调用。
为了显示对话框片段,您需要从您的 Activity 或片段中引用该片段并执行类似以下操作:
new ExceedingLimitFragment().show(getFragmentManager(), TAG);
如@dev.bmax 的回答
你的标题finish()
是Activity
的一个方法。 Fragments 或 DialogFragments 都不知道它,因此您的 IDE 抱怨它是有道理的。为了在片段中使用它,请确保执行
if(isAttached(){
getActivity.finish();
}