@Bindable не генерирует поле в классе BR - PullRequest
0 голосов
/ 31 января 2020

Я недавно начал изучать привязку данных. Эта проблема возникла в моем исходном коде:

public class MyClassName extends BaseObservable {    
    @Bindable
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name <Can\'t find name in BR>);
    }
}

Как я знаю:

Аннотация Bindable должна применяться к любому методу-получателю метода доступа класса Observable. Bindable сгенерирует поле в классе BR для идентификации измененного поля.

Но когда я добавил аннотацию @Bindable для поля name, я не могу найти BR.name в метод установки.

Мой проект содержит два пакета: com.example.package1 и com.example.packag2. Выше код находится в com.example.packge2.

Но когда я добавил аннотацию @Bindable, я не могу импортировать com.example.package2.BR, Android Studio предложила только com.example.package1.BR.

Как можно Я решил эту проблему?

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Это происходит потому, что сгенерированные источники должны быть сгенерированы первыми - и они не будут сгенерированы, пока присутствуют неизвестные ссылки. Это действительно своего рода самоубийство, но это так.

a) Просто закомментируйте эту строку:

// notifyPropertyChanged(BR.name);

b) создайте проект

c) затем снова откомментируйте его.

0 голосов
/ 31 января 2020

Вариант 1:

Просто clean проект, затем Rebuild Проект.

Вариант 2:

Попробуйте с Invalidate caches and restart в android studio .

Наконец, ЕСЛИ оба не работают, тогда

Просто используйте BR.variableName, на экране будет отображаться error, но на runtime вы не увидите error .Просто убедитесь, что variable Name и BR.NAME должны совпадать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...