#java #android #arrays #dynamic #android-button
#java #Android #массивы #динамический #android-кнопка
Вопрос:
Я создал динамический массив кнопок, которые поступают из базы данных sqllite. Ни за что на свете я не могу настроить прослушиватель кликов для каждой кнопки в отдельности. Я искал 3 часа, но безуспешно.
Будем признательны за любую помощь. Не беспокойтесь о базе данных, это просто слушатель.
imports...
public class CreatePlayList extends Activity {
ScrollView scrollleft, scrollright;
LinearLayout songsright, songsleft;
TextView testtext;
String[][] allsongs;
int numofsongs, i;
Button b1[];
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.createplaylist);
scrollleft = (ScrollView) findViewById(R.id.scrollleft);
scrollright = (ScrollView) findViewById(R.id.scrollright);
songsright = (LinearLayout) findViewById(R.id.layRight);
songsleft = (LinearLayout) findViewById(R.id.layLeft);
LyricDb connect = new LyricDb(CreatePlayList.this);
connect.open();
numofsongs = connect.getNumSongs();
b1 = new Button[(numofsongs)];
allsongs = new String[numofsongs][2];
allsongs = connect.getSongArray();
connect.close();
testtext = new TextView(this);
testtext.setText("Test");
songsleft.addView(testtext);
for (i = 0; i < allsongs.length; i ) {
b1[i] = new Button(this);
b1[i].setText(allsongs[i][1]);
songsright.addView(b1[i]);
}
b1[19].setText("test 123");
createClic();
}
public void createClic(){
for (i = 0; i < (allsongs.length - 1); i ) {
b1[i].setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
testtext.setText(b1[i].getText());
}
});
}
}
}
Комментарии:
1. итак, в чем проблема? вы получаете какое-либо сообщение об ошибке? Это случайно не позволяет ссылаться на b1 в методе onClick?
Ответ №1:
Сбросьте ‘i’, объявленный на уровне класса. Замените метод этим («Кнопка theButton» должна оставаться «окончательной»).
public void createClic()
{
for (int i = 0; i < (allsongs.length - 1); i )
{
final Button theButton = b1[i];
theButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
testtext.setText(theButton.getText());
}
});
}
}
Ответ №2:
Сначала реализуйте OnClickListener в своей деятельности и вызывайте метод setOnClickListener() для всех ваших кнопок при его создании.
b[i].setOnClickListener(this);
and also set id with each button
b[i].setId(i);
//and override this method
@Override
public void onClick(View v)
{
//here check which button called
if(v.getId==1)
{
//its Button 1 do what ever u want
}
if(v.getId==2)
{
//its Button 2 do what ever u want its Button 2
}
......
}
Ответ №3:
Попробуйте один раз…
b1[i] = new Button[allsongs.length];
for (i = 0; i < allsongs.length; i ) {
b1[i].setText(allsongs[i][1]);
songsright.addView(b1[i]);
}