Нужно сохранить переменные для моего onClick - PullRequest
0 голосов
/ 06 сентября 2011
for ( int i = 0; i < responses.size(); i++ )
    {
        Button btn = new Button( this );
        btn.setText( guideStep.getResponse( i ).getTitle() );
        btn.setOnClickListener(new OnClickListener() {
            public void onClick( View v )
            {
                try
                {
                    //NextStep(guideStep.getStep(), guideStep.getSession(), guideStep.getResponse( i ).getId() );
                }
                catch( Exception e )
                {
                    e.printStackTrace();
                }
            }
        });
        linearLayout.addView( btn );
    }

Глядя на следующий код.Я добавляю кнопки динамически в мой линейный макет.Мне нужно, динамически также, изменить событие onClick для каждой кнопки.Для этого мне нужен счетчик из цикла и какой-то способ сохранить мой объект guideStep из цикла без него.

Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 06 сентября 2011
for ( int i = 0; i < responses.size(); i++ )
{
     final int id = i; // save your variable

     ...
     try
     {
       NextStep(guideStep.getStep(), guideStep.getSession(), 
            guideStep.getResponse( id ).getId() ); // use it
     }
     ....
}
0 голосов
/ 06 сентября 2011

Вы можете использовать метод setTag(your_id) на кнопке, а затем вернуть идентификатор с помощью метода getTag() в вашем OnClick.

0 голосов
/ 06 сентября 2011
for ( int i = 0; i < responses.size(); i++ )
{
    final int fin_i = i;
    ...
    btn.setOnClickListener(new OnClickListener() {
        public void onClick( View v )
        {
           // Use fin_i 
        });
    ...
}
...