Android DataBinding:我可以将构造函数参数传递给我的数据变量吗?

时间:2017-01-01 20:30:58

标签: android android-layout android-databinding

我有一个MovieViewModel类,在我的布局文件中用作变量。

<data>
    <variable
        name="vm"
        type="udacity.nanodegree.android.p2.model.comum.MovieViewModel"/>;

</data>

根据Android Data Binding docs

  

生成名为context的特殊变量以用于绑定   根据需要表达。上下文的值是来自的Context   root视图的getContext()。上下文变量将被覆盖   具有该名称的显式变量声明。

我需要将这个特殊变量context传递给我的类,最好是布局文件中的构造函数:

public class MovieViewModel {
    private Context context;

    public MovieViewModel(Context context) {
        this.context = context;
    }    
}

有办法吗?

如果不可能,我想将其传递给我的属性,例如:

<TextView
                    android:id="@+id/text_release"
                    android:layout_width="wrap_content"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:padding="2dp"
                    android:text="@{vm.releaseDateFormated(context) ?? ``}"
                    tools:text="0000"/>

使用MovieViewModel中的上下文,如下所示:

public String getReleaseDateFormated (Context context){
    return releaseDate == null? null: context.getString(R.string.dateToYear, releaseDate);

根据这个answer,我可以这样做,但我尝试并收到了错误:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:cannot find method releaseDateFormated(android.content.Context) in class udacity.nanodegree.android.p2.model.comum.MovieViewModel
file:C:\Users\alexandre\Udacity\Nanodegrees\AndroidDevelopment\P2-PopularMovies\app\src\main\res\layout\fragment_detail.xml
loc:74:40 - 74:70
****\ data binding error ****

1 个答案:

答案 0 :(得分:4)

  

&#34;有办法吗?

数据绑定框架未创建MovieViewModel的实例。因此,当创建MovieViewModel的实例时,构造函数参数就是你的工作。

  

我尝试并收到了错误

您的错误不是来自您问题中的代码。该错误指的是releaseDateFormated()