Во-первых, я должен признать явно очень похожий , но не повторяющийся выпуск здесь . Ни одно из предложенных решений в этой теме не работает.
Структура моего приложения выглядит следующим образом:
app
java
[mydomain].[myapplication]
Models
DataModel.java
MainActivity.java
res
layout
activity_main.xml
content_main.xml
my_inner_layout.xml
Мое приложение build.gradle
содержит
dataBinding {
enabled = true
}
В MainActivity.java
У меня
import [mydomain].[myapplication].Models.DataModel;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemsSelectedListener {
DataModel dataModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
... <other layout creation template code> ...
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
dataModel = new DataModel();
binding.setValues(dataModel);
}
<navigation and auto-generated methods>
}
Мой my_inner_layout.xml
содержит
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="values"
type="[mydomain].[myapplication].Models.DataModel" />
</data>
<android.support.constraint.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"
>
<TextView
android:id="@+id/intro_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:text="@{values.valueOne}"/>
<TextView
android:id="@+id/buying_recommendation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/intro_text"
app:layout_constraintTop_toBottomOf="@id/intro_text"
android:text="@{values.valueTwo}"/>
</android.support.constraint.ConstraintLayout>
</layout>
Я передаю bind:values="@{values}"
через активность_основания к его include
d app_bar_main к его содержимому_основе к его my_inner_layout с тем же значением <data>
в каждом. Android Studio сообщает, что «пространство имен« привязка »не связана».
Если я пытаюсь запустить это, я получаю «Компиляция не удалась; подробности смотрите в выводе ошибки компилятора» Глядя в выходные данные сборки, я вижу:
В тексте ошибки по-разному error: cannot find symbol class Models
и error: package Models does not exist
Если я переместу DataModel.java из пакета Models и сразу в [mydomain]. [Myapplication], тогда я получу другой результат. Он выполняет сборку и запуск в эмуляторе, но большая часть информации о макете не отображается. Нет меню гамбургера в верхнем левом углу, нет текста заголовка в заголовке и нет кнопки настроек в верхнем правом углу, значения которых ранее автоматически включались автоматически созданным кодом в Android Studio. Я также не могу установить заголовок в коде с помощью setTitle.
Смахивание слева приводит к , однако, открывает навигационный ящик.
Я пытался сделать недействительными кэши и перезапустить их, очистить, восстановить как с файлом модели в Моделях, так и отдельно.
Главное, что я хочу - это иметь возможность использовать структуру проекта, которую я хочу. Поместить мои классы моделей в подпакет моделей. Как только это будет завершено, я хочу убедиться, что вся информация о макете будет получена, включая значок меню гамбургера, значок настроек и заголовок. Как мне этого добиться?