2013-03-06 4 views
0

У меня есть Actvivity с ListView, я установил адаптерОбратный звонок из (Список) Адаптер к деятельности

MyAdapter extends BaseAdapter 

, что адаптер имеет интерфейс обратного вызова

OnPdfClickedListener callback; 

public interface OnPdfClickedListener { 
    public void onPdfClicked(); 

} 

и в деятельности

MyActvivity implements MyAdapter.OnPdfClickedListener 

и

@Override 
    public void onPdfClicked() { 

    Log.d("TEST", "PDF CLICKED in ACTVIIVTY"); 

} 

Это почти то же самое, что описано here, которое работает как шарм для фрагментов. При попытке использования адаптера объект обратного вызова имеет значение null.

Я также попытался инстанцировании как

OnPdfClickedListener callback = new OnPdfClickedListener() { 

    @Override 
    public void onPdfClicked() { 
     // TODO Auto-generated method stub 

    } 
}; 

У меня нет никаких ошибок тогда, но соответствующий метод в деятельности никогда не вызывается.

Мой вопрос 1. почему не обратный вызов объекта нуль при использовании фрагмента, он никогда не инстанцирован

и 2. Как я могу перезвонить на операцию от адаптера?

ответ

3
  1. почему не не является объектом нуль обратного вызова при использовании фрагмента, он никогда не инстанцирован

Ваш Activity скорее всего, не зарегистрирован в качестве слушателя, с переменной callback вы (который не имеет ничего общего с Activity) экземпляром OnPdfClickedListener и (вероятно) используется, когда произошло событие.

Как я могу обратиться к активности с адаптера?

Передайте ссылку на Activity ваши MyAdapter класса, бросайте его OnPdfClickedListener и использовать его для вызова onPdfClicked вместо текущей callback переменных.

+0

Это работает, спасибо кучу! Я до сих пор не понимаю, почему, но я обвожу свою голову :) – FWeigl

+1

@Ascorbin Чтобы отправить событие (pdf нажал), вы вызовете метод onPdfClicked() 'на объект типа' OnPdfClickedListener', который будет быть слушателем/наблюдателем для события с щелчком pdf (этот объект зарегистрировался как наблюдатель). Чтобы отправить событие в вашу 'Activity', вам нужно вызвать метод onPdfClicked на объекте' Activity' (который является 'OnPdfClickedListener'), и поэтому вам нужно передать ссылку на действие.В образце фрагмента они используют переменную обратного вызова для защиты от «NullPointerException», поскольку фрагменты имеют более сложный срок службы. – Luksprog

+0

Отличное объяснение, большое спасибо. – FWeigl

0

Попробуйте добавить это:

В вашей деятельности, которая реализует интерфейс:

new MyAdapter(this,....); 

В вашем адаптере:

MyAdapter(Context context, ...){ 
    callback = (OnPdfClickedListener)context; 
} 
+0

как вы решили ??? У меня такая же проблема! У меня есть адаптер, и я хочу отправить его фрагменту, который вызывает адаптер, на котором нажимаются элементы элементов! пожалуйста, помогите мне спасибо! – Lorenzo

Смежные вопросы