ImageButton OnClickListener не запускается - PullRequest
1 голос
/ 14 ноября 2011

Я уже несколько дней растерялся.

Несколько дней назад я начал пытаться расширить представление TableLayout, чтобы сделать его разборным.Это звучало довольно прямо.

Проблема:

protected void onFinishInflate()
{
    super.onFinishInflate();

    ImageButton ib = (ImageButton) this.findViewById(R.id.collapse);
    // totally gayed
    ib.setOnClickListener(this.onButtonClick(ib));
}

//works
public OnClickListener onButtonClick(ImageButton ib) {
    try {
        if (this.collapsed)
        {
            this.Build();
            ib.setImageResource(android.R.drawable.arrow_up_float);
        } else {
            this.Collapse();
            ib.setImageResource(android.R.drawable.arrow_down_float);
        }
    } catch (Exception e) {
        Log.e("MTK", e.toString() + " : " + e.getMessage() + " : " + e.getCause());
    }
    return null;
}

Так что забавно то, что таблица откроется со всеми пропущенными строками, кроме заголовка.Метод onClick срабатывает, когда создается представление (хорошо ..?).

Но после этого я ничего не получаю и действительно не знаю, в чем проблема.Я перепробовал кучу вещей.

Решение:

public View.OnClickListener onButtonClick(final CollapsibleTableLayout tbl, final ImageButton ib) {
        return new View.OnClickListener() { 
            public void onClick(View v) {
                try {
                    if (tbl.collapsed == true)
                    {
                        tbl.Build();
                        tbl.collapsed = false;
                        ib.setImageResource(android.R.drawable.arrow_up_float);
                    } else {
                        tbl.Collapse();
                        tbl.collapsed = true;
                        ib.setImageResource(android.R.drawable.arrow_down_float);
                    }
                } catch (Exception e) {
                    Log.e("MTK", e.toString() + " : " + e.getMessage() + " : " + e.getCause());
                }
            }
        };
    }

оказалось, что я не возвращал обработчик кликов.раньше они работали немного по-другому на других языках.

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

надеюсь, это кому-нибудь поможет

1 Ответ

2 голосов
/ 14 ноября 2011

Я думаю, что проблема в том, что вы возвращаете null в методе onButtonClick, а не в действительном onClickListener.

...