Android Работа с кликами - PullRequest
       1

Android Работа с кликами

3 голосов
/ 02 декабря 2011

У меня есть два вопроса, если вы расширили представление таким образом, что ваше новое представление - это MyView расширяет представление, а MyView имеет пользовательские методы и переменные, как вы получаете доступ к этим методам и переменным в onClick?

Если

MyView mv = new MyView()
mv.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // CANNOT access MyView since v is a View and not MyView?

    }
}); 

Ответы [ 5 ]

1 голос
/ 02 декабря 2011
  1. Вы можете привести входной вид (что не является моей любимой опцией) к ваш класс MyView.
  2. Вы можете сделать переменную MyView mv финальной и получить к ней доступ в своем анонимном внутреннем классе.
  3. Или вы можете разбить ваш OnClockListener из анонимного внутреннего класса в вложенный класс и настройка MyView в качестве параметра

Пример:

MyView mv = new MyView();
MyOnClickListener listener = new MyOnClickListener(mv);
mv.setOnClickListener(listener);

...

public class MyOnClickListener implements View.OnClickListener{
    private MyView mv;

    public MyOnClickListener(MyView mv){
        this.mv = mv;
    }

    @Override
    public void onClick(View v) {
        mv.doSomething();
    }
}
1 голос
/ 02 декабря 2011

Если вы укажете последнее ключевое слово, то сможете вызывать метод на mv.

final MyView mv = new MyView()
mv.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        mv.myFunction();

    }
}); 
0 голосов
/ 02 декабря 2011

Вам нужно привести View v к MyView, чтобы вызывать ваши собственные методы.

@Override
public void onClick(View v) {
    MyView mv = (MyView)v;
    mv.myMethod();
}
0 голосов
/ 02 декабря 2011

Это просто.

mv.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
    // Just check whether the view is of your type or not.
    // If you are sure its gonna be MyView you can skip it
    if( v instanceof MyView) {
       MyView mv = (MyView)v;
       mv.yourCustomMethod();
    }

  }
}); 
0 голосов
/ 02 декабря 2011

Используйте ключевое слово super следующим образом:

super.myParentMethod()

Для доступа к ним родительские методы и методы переменных / методов доступа должны быть не менее protected. Они не могут быть private.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...