2015-01-10 38 views
0

假设我有一个扩展TextView的MyTextView类。 myTextView对象应该是可点击的。android在哪里把OnClickListener OOP明智?

一方面,OnClickListener似乎应该在MyTextView类中,因为我将使用其中的一些,并且我不想为每个人设置一个OnClickListener。如果OnClickListener位于MyTextView类中,它将只写入一次。而且,所有myTextView对象在单击时执行相同的操作。

另一方面,这些对象需要更新它们所在活动中的UI和一些变量。我无法从MyTextView类中访问这些变量和UI对象,并且它感觉不对通过构造函数向所有人发送参考。

什么是正确的做OOP明智的?

+0

尝试实现OnClickListener在MyTextView。然后你会得到一个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(); 
     } 
    } 
} 

继续实现该接口在活动

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 
    } 

}