Android прокручиваемый AlertDialog программно

Как я могу программно сделать свой AlertDialog прокручиваемым?

Мой AlertDialog определяется следующим образом:

private void DisplayAlertChoice(String title, String msg, final int pos)
{       
    alert = new AlertDialog.Builder(this);
    alert.setTitle(title);
    final LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
     CheckBox[] t=new CheckBox[15];
     for (i=0;i<currentBattery.temperatureNumber;i++)
     {               
         t[i]=new CheckBox(this);
         t[i].setText("title");
         t[i].setChecked(false);
         t[i].setOnCheckedChangeListener(this);

         layout.addView(t[i]);      
     }
    alert.setView(layout);      
    alert.show();   

}

Я пробовал несколько решений, найденных в сети, но они не работали для меня.

Может ли кто-нибудь дать мне подходящее решение, чтобы сделать его программно прокручиваемым?


person JoE    schedule 28.05.2014    source источник
comment
Вы пытались положить LinearLayout в ScrollView?   -  person Blackbelt    schedule 28.05.2014
comment
Вы также можете ознакомиться с режимом множественного выбора.   -  person codeMagic    schedule 28.05.2014
comment
множественный выбор — это круто @codeMagic   -  person Blackbelt    schedule 28.05.2014
comment
@blackbelt: я пробовал, но это заставляет мое приложение останавливаться.   -  person JoE    schedule 28.05.2014
comment
Использование ScrollView должно работать. Пожалуйста, опубликуйте трассировку стека, которую вы получаете.   -  person matiash    schedule 28.05.2014
comment
@matiash Да, это работает, спасибо. Моя ошибка заключалась в добавлении макета вместо scrollView к моему объекту оповещения. alert.setView(макет);   -  person JoE    schedule 28.05.2014
comment
проверьте мой ответ здесь stackoverflow.com/a/33098898/1881527   -  person Melbourne Lopes    schedule 13.10.2015


Ответы (1)


я пробовал, но приложение останавливается.

ScrollView может иметь только дочерний элемент. Это ограничение Android. Итак, делая

    final LinearLayout layout = new LinearLayout(this);
    ScrollView scrollView = new ScrollView(this);
    layout.setOrientation(LinearLayout.VERTICAL);
     CheckBox[] t=new CheckBox[15];
     for (i=0;i<currentBattery.temperatureNumber;i++)
     {               
         t[i]=new CheckBox(this);
         t[i].setText("title");
         t[i].setChecked(false);
         t[i].setOnCheckedChangeListener(this);

         scrollView.addView(t[i]);      
     }

приведет к сбою вашего приложения, потому что вы добавляете более одного дочернего элемента в ScrollView. Но если вы это сделаете

final LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
 CheckBox[] t=new CheckBox[15];
 for (i=0;i<currentBattery.temperatureNumber;i++)
 {               
     t[i]=new CheckBox(this);
     t[i].setText("title");
     t[i].setChecked(false);
     t[i].setOnCheckedChangeListener(this);

     layout.addView(t[i]);      
 }
 final ScrollView scrollView = new ScrollView(this); 
 scrollView.addView(layout);

он должен работать плавно.

person Blackbelt    schedule 28.05.2014
comment
Спасибо, это сработало. Моя ошибка заключалась в добавлении макета вместо scrollView к моему объекту оповещения. alert.setView(макет); - person JoE; 28.05.2014