标签: android-databinding

使用DataBinding库绑定事件

我正在尝试使用Android M附带的DataBinding Library将事件与xml中的视图绑定.我正在关注Android开发人员的示例并逐步实现.对于视图的属性,如可见性,文本工作正常,但如果我尝试与onclick绑定,它不会按预期工作.这是我到目前为止尝试过的示例代码:

 <data>
    <import type="android.view.View"/>
    <variable name="user" type="com.example.databinding.User"/>
    <variable name="handlers" type="com.example.databinding.MyHandlers"/>
</data>

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{user.firstName}"
    android:visibility="@{user.isFriend ? View.VISIBLE : View.GONE}" />
 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click Me"
    android:id="@+id/button"
    android:layout_gravity="left"
    android:onClick="@{handlers.onClickFriend}"/>
Run Code Online (Sandbox Code Playgroud)

主要活动 :

  public class MainActivity extends AppCompatActivity {

  User user;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = 
    DataBindingUtil.setContentView(this,R.layout.activity_main);
    user = new User("Pankaj","Kumar",true,true);
    binding.setUser(user);
   }
 }
Run Code Online (Sandbox Code Playgroud)

MyHandlers:

public class MyHandlers {
public void onClickFriend(View view){
    Log.i(MyHandlers.class.getSimpleName(),"Now Friend");
}

public void onClickEnemy(View …
Run Code Online (Sandbox Code Playgroud)

data-binding android android-databinding android-6.0-marshmallow

44
推荐指数
3
解决办法
4万
查看次数

使用Android数据绑定创建双向绑定

我已经实现了新的Android数据绑定,并在实现后意识到它不支持双向绑定.我试图手动解决这个问题,但我很难找到一个在绑定到EditText时使用的好解决方案.在我的布局中,我有这样的观点:

<EditText
android:id="@+id/firstname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords|textNoSuggestions"
android:text="@{statement.firstName}"/>
Run Code Online (Sandbox Code Playgroud)

另一种观点也显示了结果:

<TextView
style="@style/Text.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{statement.firstName}"/>
Run Code Online (Sandbox Code Playgroud)

在我的片段中,我创建了这样的绑定:

FragmentStatementPersonaliaBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_statement_personalia, container, false);
binding.setStatement(mCurrentStatement);
Run Code Online (Sandbox Code Playgroud)

这样可以将firstName的当前值放在EditText中.问题是如何在文本更改时更新模型.我尝试在editText上放置一个OnTextChanged-listener并更新模型.这创建了一个循环杀死我的应用程序(模型更新更新GUI,调用textChanged时间无穷大).接下来我尝试仅在发生真实变化时通知:

@Bindable
public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
        boolean changed = !TextUtils.equals(this.firstName, firstName);
        this.firstName = firstName;
        if(changed) {
            notifyPropertyChanged(BR.firstName);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这样做效果更好,但每次我写一封信时,GUI都会更新,因为编辑光标会移到前面.

欢迎大家提出意见

android android-edittext android-databinding

44
推荐指数
3
解决办法
3万
查看次数

如何在Dialog中使用数据绑定?

我在Dialog中实现数据绑定时遇到了麻烦.可能吗?

下面是我的xml.

<data>

    <variable
        name="olaBooking"
        type="com.example.myapp.viewmodels.ViewModel" />
</data>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        android:id="@+id/cv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:elevation="4dp"
        android:padding="15dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/colorPrimary"
                android:gravity="center"
                android:padding="15dp"
                android:text="OLA Cab Booked !"
                android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

            <View
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:background="@color/colorPrimaryDark" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="start|center"
                android:padding="15dp"
                android:text="Car Details" />

            <View
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:background="@color/colorPrimaryDark" />

            <TextView
                android:id="@+id/driverName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text="@{olaBooking.driverName}" />

            <TextView
                android:id="@+id/carModel"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text="@{olaBooking.getCarName}" />

            <TextView
                android:id="@+id/carNo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text="@{olaBooking.getCabNo}" />

            <TextView
                android:id="@+id/eta"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text="@{olaBooking.getEta}" /> …
Run Code Online (Sandbox Code Playgroud)

data-binding android mvvm android-databinding

44
推荐指数
5
解决办法
3万
查看次数

无法解析Android数据绑定类

使用数据绑定时,我无法MainActivityBinding 按照数据绑定指南获取类

我的布局名称是activity_main.xml.我也看到了Android - DataBinding - 如何以及何时生成Binding类?但它无法帮助我.

data-binding android android-databinding

44
推荐指数
10
解决办法
5万
查看次数

Android数据绑定:包含标记的可见性

根据http://developer.android.com/tools/data-binding/guide.html#imports,我们可以在可见性中使用这样简单的表达式:

<TextView
..
android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在include标签中执行相同操作时,如下所示:

<include
android:id="@+id/image_layout"
layout="@layout/image_layout"
android:visibility="@{notification.notifType == 0 ? View.VISIBLE : View.GONE}"/>
Run Code Online (Sandbox Code Playgroud)

然后Studio不仅以红色显示表达式,而且在构建时它会在自动生成的绑定类中显示以下错误:

错误:(138,29)错误:找不到符号方法setVisibility(int)

这是自动生成的绑定类中发生错误的位置

// batch finished
if ((dirtyFlags & 0x3L) != 0) {
    // api target 1
    this.imageLayout.setVisibility(NotifTypeNotificatio1);
}
imageLayout.executePendingBindings();
Run Code Online (Sandbox Code Playgroud)

android android-databinding

39
推荐指数
8
解决办法
2万
查看次数

Android数据绑定@BindingConversion失败,int为string

尝试为int创建一个@BindingConversion时遇到一个神秘的问题.
以下代码适用于浮点数到字符串:

XML:

...
<variable
        name="myViewModel"
        type="... .SomeModel" />
...
<TextView
            style="@style/StyleStuff"
            android:text="@{myViewModel.number}" />
Run Code Online (Sandbox Code Playgroud)

码:

public class SomeModel {
    public ObservableFloat number = new ObservableFloat();
}
Run Code Online (Sandbox Code Playgroud)

和设置:

viewModel.number.set(3.14f);
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试对字符串进行同样的操作,我会崩溃.

 public ObservableInt number = new ObservableInt();
Run Code Online (Sandbox Code Playgroud)

viewModel.number.set(42);
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

FATAL EXCEPTION: main
Process: ...myapplication, PID: 14311
android.content.res.Resources$NotFoundException: String resource ID #0xfa0
    at android.content.res.Resources.getText(Resources.java:1123)
    at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
    at android.widget.TextView.setText(TextView.java:4816)
    at ...executeBindings(ActivityAdaptersBinding.java:336)
    at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

data-binding android android-databinding

39
推荐指数
6
解决办法
2万
查看次数

android:recyclerview中的条目

我使用listview了以下条目属性:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:entries="@array/fi"/>
Run Code Online (Sandbox Code Playgroud)

现在我正在将其转换为 RecyclerView

<android.support.v7.widget.RecyclerView
    android:id="@+id/rv"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

我想知道我们是否有android:entries属性RecyclerView?或者任何其他属性而不是条目?

android android-recyclerview android-databinding

37
推荐指数
3
解决办法
3783
查看次数

android:数据绑定错误:找不到符号类

我开始使用DataBinding功能了.我面临着问题.

错误:(21,9)错误:找不到符号类ContactListActivityBinding

build.gradle(模块:app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.letsnurture.ln_202.databindingdemo"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}
Run Code Online (Sandbox Code Playgroud)

ContactListActivity.java

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import com.letsnurture.ln_202.databindingdemo.model.Contact; …
Run Code Online (Sandbox Code Playgroud)

android android-databinding

35
推荐指数
10
解决办法
6万
查看次数

如何在Android上为EditText数据绑定到onTextChanged?

Yigit博伊尔和乔治·芒特对Android的数据绑定的谈话,他们说明它是多么容易绑定到TextWatcheronTextChanged(在13:41).在按钮上.他们的幻灯片错了吗?首先,ButtonView没有onTextChanged属性.它既没有setOnTextChanged方法.也没有EditText.但他们都有addTextChangedListener一个TextWatcher输入.

那他们在说什么呢?他们是如何做到的呢?他们的示例代码无法编译,但会出现此错误:

Error:(17) No resource identifier found for attribute 'onTextChanged' in package 'android'
Run Code Online (Sandbox Code Playgroud)

如何使用Android Databinding框架绑定到任何View或特别是EditText上的"Text Changed Event"?

android android-databinding

34
推荐指数
6
解决办法
3万
查看次数

DataBinding:如何通过动态ID获取资源?

我知道可以通过资源ID引用布局中的资源:

android:text="@{@string/resourceName}"
Run Code Online (Sandbox Code Playgroud)

但是,我想通过id引用资源,这只在运行时才知道.举个简单的例子,假设我们有这样的模型:

public class MyPOJO {

    public final int resourceId = R.string.helloWorld;

}
Run Code Online (Sandbox Code Playgroud)

现在我需要将此值用作格式字符串中的值.我们称之为

<string name="myFormatString">Value is: %s</string>
Run Code Online (Sandbox Code Playgroud)

最直接的方法不起作用:

android:text="@{@string/myFormatString(myPojo.resourceId)}"
Run Code Online (Sandbox Code Playgroud)

这只会将整数值放入占位符(也证明我正确初始化了我的POJO,所以我不在这里提供整个布局).

我也试过使用@BindingConversion,但它没有用(实际上是预期的,但我还是试过了) - int仍然分配给占位符并且没有调用绑定方法.

如何通过DataBinding库中的id显式获取资源?

android android-databinding

33
推荐指数
5
解决办法
2万
查看次数