【问题标题】:how to use alertdialog builder in fragment如何在片段中使用警报对话框生成器
【发布时间】:2014-04-12 21:08:56
【问题描述】:

我想在我的应用程序中显示一个警报对话框。我正在使用片段。

     public class MyFragmentB extends Fragment {


                Context context;
                TextView tv1;
                @Override
                public View onCreateView(final LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
                    final View myFragmentView = inflater.inflate(R.layout.fragment_b, container, false);

                        tv1 = (TextView)myFragmentView.findViewById(R.id.textView1);
                        LinearLayout L = (LinearLayout)myFragmentView.findViewById(R.id.linearLayout);
                           L.setOnClickListener(new View.OnClickListener()
                             {
                               @Override
                                public void onClick(View v) {
                                   Dialog dialog = new Dialog(context);
                                      View npView =getActivity().getLayoutInflater().inflate(R.layout.dialog, null);
                                     final NumberPicker np = (NumberPicker) npView.findViewById(R.id.numberPicker1);
                                     np.setMaxValue(10); // max value 10
                                     np.setMinValue(0);   // min value 0
                                     np.setValue(Integer.parseInt(tv1.getText().toString()));
                                     np.setWrapSelectorWheel(true);
                                     AlertDialog.Builder builder = new AlertDialog.Builder(context);
                                     builder.setTitle("title");
                                     builder.setView(npView);
                                     builder.setPositiveButton("Set",
                                         new DialogInterface.OnClickListener() {
                                             public void onClick(DialogInterface dialog, int whichButton) {
                                                 tv1.setText(String.valueOf(np.getValue()));
                                             }
                                         });

                                    builder.setNegativeButton("Cancel",
                                             new DialogInterface.OnClickListener() {
                                                 public void onClick(DialogInterface dialog, int whichButton) {
                                                 }
                                             });
                                    dialog = builder.create();
                                    dialog.show();
                               }
                             });

                      return myFragmentView;
                }
            }

但它崩溃了,logcat 中的错误是

03-09 10:48:11.285: E/AndroidRuntime(899): FATAL EXCEPTION: main
03-09 10:48:11.285: E/AndroidRuntime(899): java.lang.NullPointerException
03-09 10:48:11.285: E/AndroidRuntime(899):  at com.example.tabfragment.MyFragmentB.onCreateView(MyFragmentB.java:57)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.View.measure(View.java:15848)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.View.measure(View.java:15848)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-09 10:48:11.285: E/AndroidRuntime(899):  at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:302)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.View.measure(View.java:15848)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-09 10:48:11.285: E/AndroidRuntime(899):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.View.measure(View.java:15848)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.Choreographer.doCallbacks(Choreographer.java:562)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.Choreographer.doFrame(Choreographer.java:532)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.os.Handler.handleCallback(Handler.java:730)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.os.Looper.loop(Looper.java:137)
03-09 10:48:11.285: E/AndroidRuntime(899):  at android.app.ActivityThread.main(ActivityThread.java:5103)
03-09 10:48:11.285: E/AndroidRuntime(899):  at java.lang.reflect.Method.invokeNative(Native Method)
03-09 10:48:11.285: E/AndroidRuntime(899):  at java.lang.reflect.Method.invoke(Method.java:525)
03-09 10:48:11.285: E/AndroidRuntime(899):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-09 10:48:11.285: E/AndroidRuntime(899):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-09 10:48:11.285: E/AndroidRuntime(899):  at dalvik.system.NativeStart.main(Native Method)
03-09 10:48:11.366: D/dalvikvm(899): GC_FOR_ALLOC freed 151K, 8% free 3566K/3836K, paused 34ms, total 35ms
03-09 10:49:26.219: I/Process(899): Sending signal. PID: 899 SIG: 9
03-09 17:10:17.565: D/dalvikvm(1193): GC_FOR_ALLOC freed 48K, 7% free 2593K/2760K, paused 387ms, total 388ms
03-09 17:10:17.626: I/dalvikvm-heap(1193): Grow heap (frag case) to 3.250MB for 635812-byte allocation
03-09 17:10:17.716: D/dalvikvm(1193): GC_FOR_ALLOC freed <1K, 6% free 3214K/3384K, paused 86ms, total 86ms
03-09 17:10:18.495: D/AndroidRuntime(1193): Shutting down VM
03-09 17:10:18.495: W/dalvikvm(1193): threadid=1: thread exiting with uncaught exception (group=0x41465700)

我不知道这是什么问题。有人可以帮帮我吗?

如何在片段中编写alertdialog?

【问题讨论】:

  • MyFragmentB 的第 57 行是什么
  • Myfragment B 是类
  • 错误报告说您在 MyFragmentB 类的第 57 行遇到空指针异常,这就是您的问题所在
  • 如何更改正确答案

标签: android


【解决方案1】:

替换上的上下文

Dialog dialog = new Dialog(context);

Dialog dialog = new Dialog(getApplicationContext());

此时上下文为空。

【讨论】:

  • 在我替换了 getActivity() 之后。此错误出现 03-09 19:59:33.780: E/AndroidRuntime(1145): java.lang.NullPointerException 03-09 19:59:33.780: E/AndroidRuntime(1145): at com.example.tabfragment.MyFragmentB $2.onClick(MyFragmentB.java:69)
  • 尝试使用 getApplicationContext() 代替。
  • getApplicationContext() 不能在我的代码中使用。它是显示未定义的错误
  • 尝试使用片段构造函数传递上下文:stackoverflow.com/questions/16678763/…
  • 我创建了构造函数并替换了 c 而不是上下文,但它不起作用。
【解决方案2】:

如果这就是 FragmentB 中的所有代码,那么答案就是这一行:

L.setOnClickListener

L 必须为空,因为“R.layout.fragment_b”中不存在“R.id.linearLayout”

您确定要访问的父级在该文件中吗?您可能还需要考虑使用比“linearlayout”更具描述性的名称,因为当您开始使用更复杂的布局时,事情会变得非常奇怪,非常快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多