【发布时间】:2019-01-20 19:37:28
【问题描述】:
我第一次尝试将工具栏与数据绑定一起使用,但可能在数据绑定中看不到工具栏。我想将数据从 editText 传递给 viewModel,但 viewmodel 中的变量仍然为空。 有什么问题?
activity_main:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="mainViewModel"
type="com.example.daniellachacz.weatherapp2.viewmodel.MainViewModel">
</variable>
</data>
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@color/design_default_color_primary_dark"
android:theme="@style/Base.ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:itemIconTint="@color/colorWhite">
<EditText
android:text="@={mainViewModel.city}"
android:id="@+id/city_edit_text"
android:layout_width="200dp"
android:layout_height="40dp"
android:textColor="@color/colorWhite"
android:hint="Search location"
android:textColorHint="@color/colorGrey"
android:background="@android:color/transparent"/>
</androidx.appcompat.widget.Toolbar>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom_navigation"
android:layout_below="@+id/my_toolbar"
android:layout_alignTop="@+id/my_toolbar"
android:layout_marginTop="55dp">
</FrameLayout>
</RelativeLayout>
</layout>
活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
final MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
activityMainBinding.setMainViewModel(mainViewModel);
androidx.appcompat.widget.Toolbar myToolbar = findViewById(R.id.my_toolbar);
setSupportActionBar(activityMainBinding.myToolbar);
}
【问题讨论】:
-
看看
MainViewModel的代码也会很有帮助。你的city变量是ObservableField<String>还是LiveData<String>?您需要使用 2way 数据绑定 (@=)。 -
我解决了问题。我没有设置 setHasOptionsMenu(true);在我需要编辑文本的片段中。
-
嗯,我不认为这应该与 2way 数据绑定变量为空有关,但如果你这么说:)
-
我在主 Activity 中设置了工具栏,但该 Activity 仅适用于两个片段(底部导航栏的布局),这就是数据绑定没有看到编辑文本的原因。它只在活动中工作,但应用程序在片段上启动。
标签: android data-binding