Это действительно запутано:)
Прежде всего, вы не используете метку или любое другое визуальное свойство для управления вашим приложением.Дизайн может быть изменен, язык может быть изменен, и тогда вам придется переписать логику приложения.
Во-вторых, вы не должны создавать новых слушателей событий каждый раз, когда происходит событие.Это очень много ресурсов.
Что вам нужно сделать, это создать небольшой маленький класс для элементов:
private class MyListener implements OnClickListener {
boolean revert = true;
int id;
Button button;
private MyListener(int id) {
this.id = id;
}
public void OnClick(View v) {
// Do stuff that should be done
if (revert) {
// Calls the method for revert, you have the id of the selected item
} else {
// Calls the method for directions, you have the id of the selected item
}
// TODO Change label of the button
// TODO Change state of listener
}
}
Создать массив этих слушателей:
MyListener[] listeners = new MyListener[numberOfItems];
А когда вы хотите получить предмет из адаптера:
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
// TODO If View doesn't exist, create a new one
}
Button button = (Button)view.findViewById(R.id.theButtonId);
if (listeners[position] == null) {
listeners[position] = new MyListener(position);
}
button.setText(listeners[position].revert?"Revert":"Directions");
button.setOnClickListener(listeners[position]);
listeners[position].button = button;
}