0

I want to display an alert dialog in my app.i am using fragments.

     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;
                }
            }

but it was crashing and the error in logcat was

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)

I don't know what is the problem with this.can anybody help me??

How to write alertdialog in fragment?

user3363368
  • 81
  • 1
  • 7

2 Answers2

1

Replace the context on

Dialog dialog = new Dialog(context);

with

Dialog dialog = new Dialog(getApplicationContext());

context is null at that point.

ElectronicGeek
  • 3,312
  • 2
  • 23
  • 35
  • After I replaced the getActivity(). this error is come out 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) – user3363368 Mar 10 '14 at 00:05
  • Try using getApplicationContext() instead. – ElectronicGeek Mar 10 '14 at 00:07
  • getApplicationContext() is cannot use in my code. it is show undefined error – user3363368 Mar 10 '14 at 00:16
  • Try passing a context with the fragments constructor: http://stackoverflow.com/questions/16678763/the-method-getapplicationcontext-is-undefined – ElectronicGeek Mar 10 '14 at 00:17
  • I create constructor and I replace c instead of context, but it not working. – user3363368 Mar 10 '14 at 00:46
  • because i am using swip tabs , when i call activity, i should call Like ((MainActivity)getActivity()) ? – user3363368 Mar 10 '14 at 00:49
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/49366/discussion-between-user3363368-and-electronicgeek) – user3363368 Mar 10 '14 at 00:51
0

If that's all your code in FragmentB, then the answer is this line:

L.setOnClickListener

L must be null because "R.id.linearLayout" does not exist within "R.layout.fragment_b"

Are you sure the parent you're trying to access is in that file? You may also want to consider naming things more descriptively than "linearlayout" as things will get really weird, really quickly when you start using more complicated layouts.

Cruceo
  • 6,763
  • 2
  • 31
  • 52