0

У меня возникли проблемы с выбором номера. Когда я пытаюсь добавить минимум и максимум значений в Java коде для numberpicker я получаю эту ошибкуОшибка NumberPicker в AlertDialog в DialogFragment

попытки вызвать виртуальный метод «недействительный android.widget.NumberPicker.setMinValue (INT)» на нулевой ссылке на объект

Очевидно, что он не распознает мою цифровую цифру, так что я не могу добавить значения.

Кто-то нашел решение этой проблемы here, но это меня не очень устраивает. Потому что в следующем диалоге мне понадобится еще один номерчик и настройте его в соответствии с предыдущим.

Я думаю, что проблема заключается в методе findViewById(), так как он должен работать в рамках действия. Как-то getActivity() не работает. Пожалуйста, помогите, спасибо заранее. Вот мой код;

public class MyDialog extends DialogFragment { 

public MyDialog(){} 

public static MyDialog newInstance(){ 
    MyDialog evet = new MyDialog(); 
    return evet; 
} 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState){ 
     AlertDialog.Builder bodyBuilder = new AlertDialog.Builder(getActivity()); 
     LayoutInflater inflator = getActivity().getLayoutInflater(); 
     bodyBuilder.setTitle(R.string.delirtmen); 
     NumberPicker np = (NumberPicker) getActivity().findViewById(R.id.nambir); 
     np.setMinValue(1); 
     np.setMaxValue(100); 
     final int comolokko = np.getValue(); 
     bodyBuilder.setView(inflator.inflate(R.layout.layout_diyalog, null)) 
       .setPositiveButton("Devam", new DialogInterface.OnClickListener(){ 
        @Override 
          public void onClick(DialogInterface dialog, int id){ 
         Intent intent = new Intent(getActivity(), Olurmuki.class); 
         intent.putExtra("deger", comolokko); 
         startActivity(intent); 
        } 
       }) 
       .setNegativeButton("İptal",new DialogInterface.OnClickListener(){ 
        @Override 
        public void onClick(DialogInterface dialog, int id){ 
         MyDialog.this.getDialog().cancel(); 
        } 
       }); 
     return bodyBuilder.create(); 
}} 
+1

I nflate макет и использовать завышенное представление, чтобы получить NumberPicker перед настройкой представления. Пример. 'View view = (сделайте свой надув здесь)'. Затем найдите NP, используя view.findViewById (...). Затем builder.setView (view). Извинения, ввод текста с телефона. –

+0

Да, это сработало @ Кай, спасибо. –

+0

Да, это тоже проблема @ cricket_007. –

ответ

0

Обратите внимание, что я новичок, и я не от Android Studio, но, надеюсь, это сработает.

Если я понимаю вопрос, который вы хотите получить доступ к вашему набору номеров внутри диалогового окна? Если средство выбора номера находится внутри диалогового окна, вам необходимо получить доступ к представлению компоновщика, а затем получить команду выбора номера.

Эта линия, скорее всего, проблема.

NumberPicker np = (NumberPicker) getActivity().findViewById(R.id.nambir); 

Используйте вместо этого:

NumberPicker np = (NumberPicker) bodyBuilder.findViewById(R.id.nambir); 

Это будет выглядеть для сборщика номер внутри зрения вашего диалога оповещения и вы должны получить ссылку.

Обратите внимание, что если это не сработает, вы можете ссылаться на это, и это может сработать для вас! https://stackoverflow.com/a/13026250/4502550

+0

Это будет работать до тех пор, пока у bodyBuilder не будет установлен его вид. Я отметил этот вопрос как дубликат, хотя, вероятно, это проблема –

0

попробовать это

Создать getContext()

public Context getContext(){return this;} 

, а затем

NumberPicker np = (NumberPicker) getContext().findViewById(R.id.nambir); 

, если doens't работа просто создать сборщика номер без XML от деятельности

public void Dialog(){ 


    final android.support.v7.app.AlertDialog.Builder alert = new android.support.v7.app.AlertDialog.Builder(this,R.style.CustomDialog); 
    alert.setCancelable(true); 


    LinearLayout l1 = new LinearLayout(getApplicationContext()); 


    l1.setOrientation(LinearLayout.HORIZONTAL); 
    final NumberPicker number = new NumberPicker((this)); 
    number.setMaxValue(12); 
    number.setMinValue(1); 
    number.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 
    number.setWrapSelectorWheel(true); 
Смежные вопросы