2011-12-01 5 views
3

새로운 뷰가 MyView가 View를 확장하고 MyView에 사용자 정의 메서드와 변수가있는 뷰를 확장 한 경우 onClick에서 해당 메서드와 변수에 어떻게 액세스합니까?Android 클릭 이벤트 다루기

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? 

    } 
}); 

답변

0

간단합니다.

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

사용이 방법으로 키워드 super 경우

super.myParentMethod()

상위 메소드와 변수/접근 방법에 액세스 적어도 protected해야합니다. 그들은 private 일 수 없습니다.

1

정확하게 최종 키워드를 입력하면 mv에서 메서드를 호출 할 수 있습니다.

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

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

    } 
}); 
0

당신은 당신의 자신의 메소드를 호출하기 위해 MyViewView v 캐스팅해야합니다.

@Override 
public void onClick(View v) { 
    MyView mv = (MyView)v; 
    mv.myMethod(); 
} 
1
  1. 당신은 당신의 MYVIEW 클래스 (나의 마음에 드는 옵션이 아닙니다) 입력보기를 캐스팅 할 수있다.
  2. MyView mv 변수를 최종적으로 만들어 익명의 내부 클래스에서 액세스 할 수 있습니다.
  3. 또는 당신은 매개 변수로 중첩 된 클래스와 설정 MYVIEW에 익명의 내부 클래스에서 당신의 OnClockListener을 깰 수

예 :

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(); 
    } 
} 
+0

감사합니다, 나는 그 그러나 나는 시도 맹세 없어야합니다. 그것이 내가 머리를 차가워서 프로그래밍 할 때 얻는 것입니다. – esse