Android: onCLickListener для пользовательского просмотра - PullRequest
0 голосов
/ 24 августа 2011

Я создал пользовательский вид, который должен изменить его внешний вид при нажатии.onClickListener и OnTouchEventListener вызываются правильно, а appreance изменился в представлении.

Но как только я установил другое onClickListener в Activity для взаимодействия с другими методами, только onClickListenerиз Activity вызывается и тот, что внутри View, игнорируется.

Есть ли возможность наследовать onClickListener от View к Activity, чтобы оба (Visualchange и вызов метода) вызывали OnClick?

Я также пытался реализовать View с Drawables и StateListDrawable, но также безуспешно, так как "state_pressed" не будет вызван.

Есть идеи?Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 11 декабря 2012

Если вы хотите установить прослушиватель в пользовательском представлении, вы должны установить прослушиватель в конструкторе настраиваемого представления .В противном случае он не будет вызываться снаружи.(Вы не должны использовать функцию, которая будет обрабатывать клики)

0 голосов
/ 17 марта 2016

Если вы хотите установить OnClickListener из-за пределов представления, например, выполнив: customView.setOnClickListener(listener), вы можете сделать это:

  1. Внутри пользовательского представления объявите переменную типа onClickListener:
private OnClickListener onClickListener;
Переопределите эти два метода следующим образом:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if(event.getAction() == KeyEvent.ACTION_UP &&
            (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER || event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
        if(onClickListener != null) onClickListener.onClick(this);
    }
    return super.dispatchKeyEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        setPressed(true);
    }
    else if(event.getAction() == MotionEvent.ACTION_UP) {
        if(onClickListener != null) onClickListener.onClick(this);
        setPressed(false);
    }
    else {
        setPressed(false);
    }
    return super.dispatchTouchEvent(event);
}
И переопределите setOnClickListener настройку вашей переменной:
@Override
public void setOnClickListener(OnClickListener l) {
    onClickListener = l;
}

Вот и все.

0 голосов
/ 24 августа 2011

Вы переопределяете OnClickListener объекта, когда устанавливаете его из Activity. если вы делаете что-то подобное в своем методе onClick () из Activity, оно должно работать.

public void onClick(View v){
    //Do whatever you want
    super.onClick(v);
}

Однако вам, вероятно, не следует настраивать графику кнопок для слушателей, нажимающих кнопку или касания. Это как раз то, для чего нужны селекторы кнопок.

...