Как заставить работать массив кнопок OnClickListener для Android

#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]);
    }