Как вернуть сенсорное событие ImageView обратно в родительское действие ImageView - PullRequest
1 голос
/ 02 января 2012

У меня есть Activity с макетом, содержащим пользовательский ImageView и несколько других представлений (ListView и несколько других TextView с). В зависимости от того, где пользователь касается ImageView, мне нужно изменить содержимое ListView и TextView s. У меня есть onTouchEvent слушатель, работающий нормально в классе ImageView, но каким-то образом мне нужно сообщить классу Activity, что событие касания произошло в ImageView, и передать ему некоторые данные ... тогда Activity может правильно настроить все другие взгляды.

Я думал о попытке вернуть «false» из обработчика ImageView onTouchEvent, таким образом позволяя событию переходить в соответствие с родительским представлением ImageView, но я не думаю, что оно имеет родительское представление ... просто родитель ViewGroup (LinearLayout).

Для меня это похоже на проблему дизайна, но я не уверен.

Заранее спасибо за любые предложения.

1 Ответ

0 голосов
/ 02 января 2012

Я не думаю, что есть встроенный способ сделать это. Напишите свой класс представления изображения всем, чтобы обратный вызов был зарегистрирован после того, как он изменит свое содержание. Затем в методе действия onCreate найдите представление изображения и зарегистрируйте действие в качестве объекта обратного вызова. Когда представление изображения завершает обработку события прикосновения, оно может просто вызвать метод обратного вызова.

Вот эскиз того, как это может работать:

public class MyImageView extends ImageView {
    public interface OnImageChangedListener {
         public void imageChanged(MyImageView view);
    }

    private OnImageChangedListener mChangeListener;

    public void setOnImageChangedListener(OnImageChangedListener listener) {
        mChangeListener = listener;
    }

    // inside your OnTouchListener:
        public boolean onTouch(View view, MotionEvent event) {
            // make updates, then, if warranted:
            if (mChangeListener != null) {
                mChangeListener.imageChanged(MyImageView.this);
            }
        }

Тогда просто объявите, что ваша деятельность реализует MyImageView.OnImageChangedListener и вызовите imageView.setOnImageChangedListener(this) после нахождения представления изображения (возможно, с использованием findViewById).

Очевидно, что вы можете сохранить некоторые данные, сокращая имена методов. Что еще более важно, вы можете, если это будет полезно, добавить дополнительные аргументы в метод обратного вызова.

...