我有一个包含自定义视图和几个按钮的活动。
现在,如果单击视图,我将在视图类中使用覆盖的 onTouchEvent 来处理它。
但是,根据用户点击的确切位置,我可能想要更改父活动中按钮中包含的文本。
换句话说:如何让父活动从我的自定义视图接收数据?
我有一个包含自定义视图和几个按钮的活动。
现在,如果单击视图,我将在视图类中使用覆盖的 onTouchEvent 来处理它。
但是,根据用户点击的确切位置,我可能想要更改父活动中按钮中包含的文本。
换句话说:如何让父活动从我的自定义视图接收数据?
定义一个接口并使用回调让活动知道该视图已被触摸。
public Interface ViewWasTouchedListener {
void onViewTouched(float x, float y);
}
在您的自定义视图中
ArrayList<ViewWasTouchedListener> listeners = new ArrayList<ViewWasTouchedListener>();
...
public void setWasTouchedListener(ViewWasTouchedListener listener){
listeners.add(listener);
}
在你的触摸事件中
for (ViewWasTouchedListener listener:listeners){
listener.onViewTouched(x,y);
}
在您的活动中:
public class Test extends Activity implements ViewWasTouchedListener {
...
@Override
public void onCreate(Bundle savedInstanceState)
{
...
MyExtendedView customView = (MyExtendedView)findViewById(R.id.myCustomeView);
customView.setWasTouchedListener(this);
...
}
public void onViewTouched(float x, float y){
// do whatever you need to do
}
您可以通过添加 removeViewWasTouchedListener 并检查您没有在 setViewWasTouchedListener 中添加两次相同的侦听器来改进视图类。