質問

I'm trying to show a NumberPicker in a dialog in order to let the user select a value between 0 and 10. It's my second day spent trying to make it work.

This is what I have:

  • fragment_number_picker (layout):

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/numberPickerFragmentLinearLayout"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:orientation="horizontal" >
    
       <NumberPicker
           android:id="@+id/numberPickerInFragment"
           android:layout_width="wrap_content"
           android:layout_height="48dp"
           android:orientation="horizontal" />
    
      </LinearLayout>
    
  • DialogFragment definition:

    public class NumberPickerCustomDialog extends DialogFragment {
    Context context;
    public NumberPickerCustomDialog() {}
    
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        context = getActivity().getApplicationContext();
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        LayoutInflater li = (LayoutInflater)     
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
        // Inflate and set the layout for the dialog
        View view = li.inflate(R.layout.fragment_number_picker, null);
    
        builder
        // Set view:
           .setView(view)
        // Add action buttons
           .setPositiveButton(R.string.accept, new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int id) {
                       // Accept number
                }
             })
           .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
            });   
    
       NumberPicker np = (NumberPicker) view.findViewById(R.id.numberPickerInFragment);
       np.setMaxValue(200);
       np.setMinValue(0);
    
       np.setFocusable(true);
       np.setFocusableInTouchMode(true);
    
       return builder.create();
       }
    }
    
  • Call from the main Activity:

    public void openNumberPicker(){
         FragmentManager fm = getSupportFragmentManager();
         NumberPickerCustomDialog npc = new NumberPickerCustomDialog();
         npc.show(fm, "fragment_number_picker");
    }
    

I'm getting an InvocationTargetException and I can't make it work.

Any ideas? Thanks!

役に立ちましたか?

解決

Try changing the context you're using:

context = getActivity().getApplicationContext();

Instead, you need the activity's own context:

context = getActivity();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top