android 将 OnClickListener OOP 放在哪里?

android where to put OnClickListener OOP-wise?

假设我有一个扩展 TextView 的 MyTextView class。 myTextView 对象应该是可点击的。

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

另一方面,这些对象需要更新 UI 和它们所在的 activity 中的一些变量。我无权访问这些变量和 UI MyTextView class 中的对象,并且通过构造函数发送对所有对象的引用感觉不对。

OOP 明智的做法是什么?

你可以这样做

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

继续实现activity中的接口

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
    }

}