カスタム ビューといくつかのボタンを含むアクティビティがあります。
ビューがクリックされた場合は、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 に同じリスナーを 2 回追加しないことを確認することで、ビュー クラスを改善できます。