【问题标题】:Toolbar and Databinding工具栏和数据绑定
【发布时间】: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&lt;String&gt; 还是LiveData&lt;String&gt;?您需要使用 2way 数据绑定 (@=)。
  • 我解决了问题。我没有设置 setHasOptionsMenu(true);在我需要编辑文本的片段中。
  • 嗯,我不认为这应该与 2way 数据绑定变量为空有关,但如果你这么说:)
  • 我在主 Activity 中设置了工具栏,但该 Activity 仅适用于两个片段(底部导航栏的布局),这就是数据绑定没有看到编辑文本的原因。它只在活动中工作,但应用程序在片段上启动。

标签: android data-binding


【解决方案1】:

您是否尝试从@={mainViewModel.city} 中删除= 只是@{mainViewModel.city}

【讨论】:

  • 是的,还是一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2016-07-28
  • 2014-09-17
  • 2014-02-20
相关资源
最近更新 更多