android在哪里放置OnClickListener OOP-wise?

时间:2015-01-10 13:27:45

标签: java android oop

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

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

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

以OOP方式做什么是正确的?

1 个答案:

答案 0 :(得分: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
    }

}