Ошибка NumberPicker в AlertDialog

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

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

Очевидно, он не распознает мой набор номеров, поэтому я не могу добавить значения.

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

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

person Tahir Ferli    schedule 07.10.2016    source источник
comment
Раздуйте макет и используйте раздутый вид, чтобы получить NumberPicker перед настройкой вида. Пример.. View view = (do your inflate here). Затем найдите NP с помощью view.findViewById(...). Затем builder.setView(представление). Извиняюсь, пишу с телефона.   -  person Zhi Kai    schedule 07.10.2016
comment
Да, это сработало, @Kai, спасибо.   -  person Tahir Ferli    schedule 07.10.2016
comment
Да, это та же проблема @cricket_007, спасибо.   -  person Tahir Ferli    schedule 07.10.2016


Ответы (2)


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

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

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

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

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

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

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

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

person CardDeath    schedule 07.10.2016
comment
Это будет работать до тех пор, пока bodyBuilder не назначит свой вид. Однако я пометил этот вопрос как дубликат, поскольку, вероятно, это проблема. - person OneCricketeer; 07.10.2016

попробуй это

Создайте getContext()

public Context getContext(){return this;}

а потом

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

если это не работает, просто создайте средство выбора номера без 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);
person Diogo Rosa    schedule 07.10.2016