【发布时间】:2014-05-21 14:39:56
【问题描述】:
我正在尝试创建许多教程中显示的简单对话框片段,但是仍然遇到一些错误并且无法弄清楚。到目前为止,我拥有的是 MainActivity,它在其布局上保存了片段。我想做的是,一旦用户点击按钮,就显示 DialogFragment。
MainActivity.java
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
private Button btn1;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
btn1 = (Button) getActivity().findViewById(R.id.button1);
btn1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
new MyDialogFragment().show(getFragmentManager(), "MyDialog");
}
});
}
}
}
MyDialogFragment.java
class MyDialogFragment extends DialogFragment{
Context mContext;
public MyDialogFragment() {
mContext = getActivity();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext);
alertDialogBuilder.setTitle("Really?");
alertDialogBuilder.setMessage("Are you sure?");
//null should be your on click listener
alertDialogBuilder.setPositiveButton("OK", null);
alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
return alertDialogBuilder.create();
}
}
这里是日志,如果我点击按钮就会得到。
05-21 10:36:57.600: D/dalvikvm(1913): Not late-enabling CheckJNI (already on)
05-21 10:36:57.770: D/(1913): HostConnection::get() New Host Connection established 0xb9816d80, tid 1913
05-21 10:36:57.810: W/EGL_emulation(1913): eglSurfaceAttrib not implemented
05-21 10:36:57.820: D/OpenGLRenderer(1913): Enabling debug mode 0
05-21 10:37:01.200: D/AndroidRuntime(1913): Shutting down VM
05-21 10:37:01.200: W/dalvikvm(1913): threadid=1: thread exiting with uncaught exception (group=0xb0d47b20)
05-21 10:37:01.200: E/AndroidRuntime(1913): FATAL EXCEPTION: main
05-21 10:37:01.200: E/AndroidRuntime(1913): Process: com.example.dialog, PID: 1913
05-21 10:37:01.200: E/AndroidRuntime(1913): java.lang.NullPointerException
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:360)
05-21 10:37:01.200: E/AndroidRuntime(1913): at com.example.dialog.MyDialogFragment.onCreateDialog(MyDialogFragment.java:22)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.os.Handler.handleCallback(Handler.java:733)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.os.Handler.dispatchMessage(Handler.java:95)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.os.Looper.loop(Looper.java:136)
05-21 10:37:01.200: E/AndroidRuntime(1913): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-21 10:37:01.200: E/AndroidRuntime(1913): at java.lang.reflect.Method.invokeNative(Native Method)
05-21 10:37:01.200: E/AndroidRuntime(1913): at java.lang.reflect.Method.invoke(Method.java:515)
05-21 10:37:01.200: E/AndroidRuntime(1913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-21 10:37:01.200: E/AndroidRuntime(1913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-21 10:37:01.200: E/AndroidRuntime(1913): at dalvik.system.NativeStart.main(Native Method)
提前致谢
【问题讨论】:
标签: java android exception android-fragments android-dialogfragment