2013-03-04 3 views
0

В основном я создаю кнопки в цикле for, мне нужно, чтобы каждая кнопка возвращала другое значение при нажатии.Разработка Android: Передача параметра в onClickListener()

Я думал, что создание моего собственного onClickListener() и передача данных, необходимых в качестве параметра при инициализации, будут работать. По-видимому, нет синтаксических ошибок в том, что я придумал, но когда кнопка нажата во время выполнения приложения, происходит сбой.

Heres упрощенная версия того, что у меня есть до сих пор.

int counter = 1; 
for(Program element : someList) 
    { 
    //some other code for dynamically creating textviews to stick the buttons in 

    //code which creates the buttons on the fly 
    moreInfo = new Button(this); 
    moreInfo.setText("More Info"); 
    moreInfo.setOnClickListener(new DynamicOnClickListener(counter)); 
    counter++; 

    } 

Класс пользовательского слушателя

import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Toast; 

public class DynamicOnClickListener implements OnClickListener 
{ 

    int counter; 
    public DynamicOnClickListener(int acounter) { 
     this.counter = acounter; 
    } 

    public void onClick(View v) { 
     Log.v("DynamicOnClickListener","1"); 
     Toast.makeText(v.getContext(), counter, Toast.LENGTH_LONG).show(); 
    } 

} 

Таким образом, в теории, если это работает каждую кнопка будет возвращать другое число, надежду, что имеет смысл.

+3

Как это сбой? (logcat) – DigCamara

+0

logcat очень нужен :) – Triode

ответ

3

Toast.makeText принимает идентификатор ресурса строки как второй аргумент. Значение вашего счетчика не является допустимым идентификатором ресурса, так как вы получаете ошибку. Вам необходимо передать String вместо int, и он будет работать.

Toast.makeText(v.getContext(), String.valueOf(counter), Toast.LENGTH_LONG).show(); 
1

Вместо создания нескольких слушателей вы можете использовать SetTag()

moreInfo = new Button(this); 
moreInfo.setText("More Info"); 
moreInfo.setTag(new Integer(counter)); 
moreInfo.setOnClickListener(new DynamicOnClickListener(); 

затем, в прослушивателе

public void onClick(View v) { 
    Log.v("DynamicOnClickListener","1"); 
    Toast.makeText(v.getContext(), ((Integer)v.getTag()).toString(), Toast.LENGTH_LONG).show(); 
} 
Смежные вопросы