假设我有一个扩展TextView的MyTextView类。 myTextView对象应该是可点击的。
一方面,似乎OnClickListener应该在MyTextView类中,因为我将使用其中的一些,我不想为每一个设置OnClickListener。如果OnClickListener位于MyTextView类中,则只会写入一次。此外,所有myTextView对象在单击时执行相同的操作。
另一方面,这些对象需要更新UI和它们所在活动中的一些变量。我无法从MyTextView类中访问这些变量和UI对象,并且它感觉不对通过costructor发送对所有这些的引用。
以OOP方式做什么是正确的?
答案 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
}
}