Butterknife не может связать представления после разделения проекта на модули

Я включил ButterKnife.setDebug(BuildConfig.DEBUG)

Происходит то, что классы, которые всегда работали, теперь не могут найти привязки для представлений. После вызова ButterKnife.bind(this); представление по-прежнему равно нулю, и когда я проверяю журналы, я вижу следующее:

16401-16401 D/ButterKnife: Looking up binding for com.mobile.myapp.presentation.view.controllers.login.activities.WelcomeActivity
16401-16401 D/ButterKnife: Not found. Trying superclass com.mobile.myapp.presentation.view.base.myappBaseMvpActivity
16401-16401 D/ButterKnife: Not found. Trying superclass com.hannesdorfmann.mosby.mvp.MvpActivity
16401-16401 D/ButterKnife: Not found. Trying superclass android.support.v7.app.AppCompatActivity
16401-16401 D/ButterKnife: MISS: Reached framework class. Abandoning search.

Поэтому я подумал, что это может быть зависимость процессора аннотаций. Я добавил следующее в каждый модуль:

implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

Но все та же проблема, и никакие представления не получают привязок, там ноль. Я понимаю, что могу переключиться на Kotlin, но у меня есть много классов на Java, и я предпочитаю связываться с помощью Butterknife. Что мне не хватает. Эти проблемы возникают во время выполнения.

Вот пример класса с нулевой привязкой:

public class WelcomeActivity extends myappBaseMvpActivity<WelcomeView, WelcomePresenter> implements WelcomeView {

    @Nullable
    @BindView(R.id.btn_showlogin)
    Button btn_login; //this is null


    @Nullable
    @BindView(R.id.pager)
    ViewPager mViewPager; //this is null, why ?

    @Override
    protected void onResumeFragments() {
        super.onResumeFragments();
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        ButterKnife.bind(this);

        mViewPager.setAdapter(new WelcomeIntroPagerAdapter(getSupportFragmentManager()));
    }
//...
}

ОБНОВЛЕНИЕ: Я ПРЕОБРАЗОВАЛ СВОЙ КОД В KOTLIN, ЧТОБЫ РЕШИТЬ ТАКИЕ ПРОБЛЕМЫ, НО ВСЕ ЕЩЕ ХОЧУ ЗНАТЬ, ПОЧЕМУ МАСЛЯНЫЙ НОЖ НЕ РАБОТАЕТ.


person j2emanue    schedule 17.04.2018    source источник
comment
Вы добавили apply plugin: 'com.jakewharton.butterknife' в соответствующие модули?   -  person reVerse    schedule 17.04.2018
comment
я добавляю следующее в каждый модуль: реализация 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' . но то, что я пытаюсь получить к нему доступ в моем модуле приложения, у которого уже есть эта зависимость. Я пробовал очистить и восстановить. все было хорошо, пока я не разделил проект на модули.   -  person j2emanue    schedule 17.04.2018


Ответы (3)


Файл->Настройки->Плагины->Android ButterKnife Zelezny

Пожалуйста, выполните следующие действия и установите плагин.

person Hitesh Manwani    schedule 17.04.2018

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import this above class or check

https://github.com/JakeWharton/butterknife#download

person Hitesh Manwani    schedule 17.04.2018

Если у вас есть зависимости kotlin, вам следует использовать kapt вместо annotationProcessor.

//View Binding and Logging
implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT'
kapt 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'

Вышеупомянутое для AndroidX, но вы можете использовать его с версией, которая у вас есть. Просто используйте Капт! Также, если вы обновили свои библиотеки до androidx или у вас есть обновление плагина Gradle, вам следует использовать последнюю версию библиотеки! Позвольте мне знать, если это помогает.

person Sijan Gurung    schedule 09.08.2018