当前位置: 代码迷 >> Android >> 如何在片段中使用Alertdialog构建器
  详细解决方案

如何在片段中使用Alertdialog构建器

热度:105   发布时间:2023-08-04 12:25:53.0

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

     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?

替换上下文

Dialog dialog = new Dialog(context);

Dialog dialog = new Dialog(getApplicationContext());

此时上下文为null。

如果这是FragmentB中的全部代码,那么答案是这一行:

L.setOnClickListener

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

您确定要访问的父项位于该文件中吗? 您可能还想考虑用比“ linearlayout”更描述性的方式命名事物,因为当您开始使用更复杂的布局时,事物会变得非常怪异,非常快。

  相关解决方案