2015-01-10 3 views
0

TextView를 확장하는 MyTextView 클래스가 있다고 가정합니다. myTextView 객체를 클릭 할 수 있어야합니다.android 어디서 OnClickListener를 넣을 까?

한편, OnClickListener 클래스는 MyTextView 클래스에 있어야하며 그 중 일부는 사용할 것이므로 각 클래스에 OnClickListener를 설정하지 않으려 고합니다. OnClickListener가 MyTextView 클래스에 있으면 한 번만 기록됩니다. 또한 모든 myTextView 객체는 클릭 할 때 동일한 작업을 수행합니다.

반면에 이러한 개체는 UI 및 변수가있는 활동을 업데이트해야합니다. MyTextView 클래스 내에서 이러한 변수 및 UI 개체에 액세스 할 수 없으며 올바르게 작동하지 않습니다. 비용 생성자를 통해 이들 모두에 대한 참조를 보냅니다.

OOP 방식으로하는 것이 옳은 것은 무엇입니까?

+0

시도를 인터페이스를 구현 계속 할 수 있습니다. 그런 다음 onClick 콜백을받습니다. 이 메서드에서 MyTextView 클래스에 대한 작업을 수행 할 수 있으며 그 후에이 콜백을 외부 수신기에 제공 할 수 있습니다. – Krish

답변

1

그렇게

class MyTextView extends TextView implements View.OnClickListener{ 

    public MyTextView(Context context) { 
     super(context); 
     this.setOnClickListener(this); 
    } 

    public static interface MyTextListener{ 
     public void updateUI(); 
    } 

    @Override 
    public void onClick(View v) { 
     if(getContext() instanceof MyTextListener){ 
      ((MyTextListener)getContext()).updateUI(); 
     } 
    } 
} 

활동에 MyTextView에 OnClickListener를 구현하는

public class MainActivity extends Activity implements MyXextView.MyTextListener { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);  
    } 

    @Override 
    public void updateUI() { 
     //update here 
    } 

} 
관련 문제