Я уже несколько дней растерялся.
Несколько дней назад я начал пытаться расширить представление 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());
}
}
};
}
оказалось, что я не возвращал обработчик кликов.раньше они работали немного по-другому на других языках.
Я думал, что если бы я сделал это таким образом, я не смог бы изменить класс, в котором я работал, но вам просто нужно передать окончательные ссылки на обработчик кликов.
надеюсь, это кому-нибудь поможет