Динамически создаваемая кнопка Android: setOnClickListener не работает - PullRequest
4 голосов
/ 31 октября 2009

onClick никогда не срабатывает! Почему бы и нет? Пожалуйста, помогите мне.

for(int i = 0; i < 12; i++) {
    String title = "Button" + i;
    Button sliderButton = new Button(this);
    sliderButton.setText(title);
    glideMenuTray.addView(sliderButton,100,40);

    sliderButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d("gm", "Tapped ");
        }
    });
}

Ответы [ 5 ]

2 голосов
/ 31 октября 2009

Я не эксперт в подобных вещах, но, возможно, это как-то связано со сборкой мусора, а OnClickListeners выходит за рамки.

Хотя я не думаю, что вы можете использовать сверхлегкий подход к onClickListeners, о котором упоминает Димитар, вы, вероятно, можете использовать промежуточный подход, который обсуждается в разделе, на который он ссылается, даже если это не новый подход. Чтобы повторить пример кода здесь, это:

View.OnClickListener handler = View.OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.myButton: // doStuff
                break;
            case R.id.myOtherButton: // doStuff
                break;
        }
    }
}

findViewById(R.id.myButton).setOnClickListener(handler);
findViewById(R.id.myOtherButton).setOnClickListener(handler);

Если единственное, что отличает кнопки, это текст их заголовка, то вы можете использовать это для различения их в основном методе onClick.

2 голосов
/ 24 марта 2011

Кроме того, не сомневайтесь, у меня когда-то была такая проблема в TextView, потому что я не добавил setClickable(true)

Мой код был что-то вроде

TextView text = new TextView(this);
text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
text.setText("***");
text.setClickable(true);

text.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        //My action
    }
});

myViewGroup.addView(text );

Надеюсь, это поможет

0 голосов
/ 15 января 2014

установить setOnClickListener перед добавлением представления.

for(int i = 0; i < 12; i++) {
    String title = "Button" + i;
    Button sliderButton = new Button(this);
    sliderButton.setText(title);
    sliderButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d("gm", "Tapped ");
        }
    glideMenuTray.addView(sliderButton,100,40);
}
0 голосов
/ 01 октября 2012

Прав ли я, предполагая, что следующая строка:

glideMenuTray.addView(sliderButton,100,40);

Добавляет вид к координатам x: 100, y: 40 на некоторый вид, расширяющий ViewGroup?

В этом случае вы накладываете 12 кнопок друг на друга, только последняя кнопка (помеченная как Button11) будет видимой (и активируемой).

И при условии, что этому вопросу уже 3 года, я очень надеюсь, что вы уже решили этот вопрос:)

0 голосов
/ 31 октября 2009

Если вы используете Donut или Eclair, вы можете использовать обычный прослушиватель кликов, зарегистрированный в вашей активности и связанный с вашими кнопками в XML-макете.

Для справки смотрите здесь , категория Легче слушателей кликают .

...