0

Я использую библиотеку butterknife в своем проекте. Он отлично работает, когда я создаю Lollipop AOSP, но тот же код ничего не инициализирует, и после этого NPE бросается в Marshmallow AOSP.Butterknife не инициализирует виды в зефире AOSP, но отлично работает в lollipop

Вот код:

public class ErrorLayoutViewHolder extends ViewHolder { 

    @Bind(R.id.error_content_container) 
    View errorContentLayout; 
    @Bind(R.id.error_message) 
    TextView errorMessage; 
    @Bind(R.id.retry_button) 
    View retryButton; 

    public ErrorLayoutViewHolder(final View itemView, View.OnClickListener retryListener) { 
     super(itemView); 
     retryButton.setOnClickListener(retryListener); 
    } 
} 

Это родительский класс ViewHolder.java:

public class ViewHolder { 
    final public View itemView; 

    public ViewHolder(View itemView) { 
     this.itemView = itemView; 
     itemView.setTag(this); 
     ButterKnife.bind(this, itemView); 
    } 
} 

Это StackTrace:

AndroidRuntime: java.lang.NullPointerException: Attempt to invoke  virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
02-25 20:38:57.538 5922 5922 E AndroidRuntime: at com.micromax.aroundyou.model.ui.viewholders.ErrorLayoutViewHolder.<init>(ErrorLayoutViewHolder.java:38) 

линия 38 :

retryButton.setOnClickListener(retryListener); 

В чем проблема?

+0

Вы должны называть 'ButterKnife.bind (this, itemView);' перед строкой 38 –

+0

ButterKnife.bind (this, itemView); находится в конструкторе родительского класса, который вызывается до строки 38 – charlie156

+0

. Затем вы должны иметь оператор привязки в родительском классе. То, что вы делаете, похоже на попытку присвоить переменную дочернего класса из родительского класса! –

ответ

0

Я думаю, что вы должны бросить представление на кнопку или любой другой пользовательский вид, который вы используете. Пробовали ли вы использовать Butterknife's

@OnClick(R.id.retry_button) void foo(){ //TODO button logic }

? Таким образом, вы вообще не заботитесь о классе представления.

+0

Но когда я удаляю кнопку и пытаюсь изменить видимость textview (errorMessage), она также бросает NPE – charlie156

+0

. Вы проверяли, не ошибся ли errorMessage при попытке отобразить его? Если вы уверены, что это не null, попробуйте это: 'errorMessage.setText (String.valueOf (yourerror))'. Если это не проблема, проверьте свой макет и убедитесь, что у вас есть все, что вы пытаетесь связать. –

+0

Проблема в том, что этот код отлично работает в lollipop aosp, но не в marshmallow aosp – charlie156