dataBingding 使用 范例

本文介绍了一个使用数据绑定技术的安卓应用示例,展示了如何通过数据绑定将数据源与UI元素连接起来,实现动态显示数据和响应数据变化的功能。具体包括基本绑定、自定义绑定和集合数据绑定等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理论相见这里 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html 

http://segmentfault.com/a/1190000002876984

package com.liangfeizc.databindingsamples.basic;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.liangfeizc.databindingsamples.BaseActivity;
import com.liangfeizc.databindingsamples.R;
import com.liangfeizc.databindingsamples.databinding.ActivityBasicBinding;

public class BasicActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ActivityBasicBinding binding = DataBindingUtil.setContentView(
                this, R.layout.activity_basic);
        User user = new User("fei", "Liang");
        binding.setUser(user);
    }
}

activity_basic.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <import type="com.liangfeizc.databindingsamples.basic.User" />
        <import type="com.liangfeizc.databindingsamples.utils.MyStringUtils" alias="StringUtils" />
        <import type="android.view.View" />

        <variable name="user" type="User" />
    </data>

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp">
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:text="Display Name: " />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.displayName ?? user.lastName}" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:text="First Name: " />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{StringUtils.capitalize(user.firstName)}" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:text="Last Name: " />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.lastName}" />
        </TableRow>

        <TableRow>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="right"
                android:text="Age: " />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{String.valueOf(user.age)}" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Adult"
                android:textColor="@android:color/holo_red_light"
                android:textStyle="italic"
                android:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}" />
        </TableRow>
    </TableLayout>
</layout>


binding activity

package com.liangfeizc.databindingsamples.custombindings;

import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.liangfeizc.databindingsamples.BaseActivity;
import com.liangfeizc.databindingsamples.ContactBinding;
import com.liangfeizc.databindingsamples.R;

public class CustomBindingActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ContactBinding binding = DataBindingUtil.setContentView(
                this, R.layout.activity_custom_binding);

        Contact contact = new Contact("111", "Japan");
        binding.setContact(contact);
    }
}


CollectionActivity
package com.liangfeizc.databindingsamples.collections;

import android.app.job.JobInfo;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.SparseArray;
import android.view.Menu;
import android.view.MenuItem;

import com.liangfeizc.databindingsamples.BaseActivity;
import com.liangfeizc.databindingsamples.R;
import com.liangfeizc.databindingsamples.databinding.CollectionsBinding;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CollectionActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        CollectionsBinding binding = DataBindingUtil.setContentView(
                this, R.layout.activity_collection);

        String[] literals = new String[]{"liang", "fei"};

        List<String> list = new ArrayList<>();
        SparseArray<String> sparse = new SparseArray<>(2);

        String key = "firstName";
        int index = 0;

        for (int i = 0; i < literals.length; i++) {
            list.add(literals[i]);
            sparse.put(0, literals[i]);
        }

        Map<String, String> map = new HashMap<>();
        map.put(key, "liang");
        map.put("lastName", "fei");

        binding.setIndex(index);
        binding.setKey(key);
        binding.setList(list);
        binding.setSparse(sparse);
        binding.setMap(map);
    }
}


activity_collection

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data class="CollectionsBinding">
        <import type="java.util.Map" />
        <import type="java.util.List" />
        <import type="android.util.SparseArray" />

        <variable name="list" type="List<String>" />
        <variable name="sparse" type="SparseArray<String>"/>
        <variable name="map" type="Map<String, String>"/>
        <variable name="index" type="int" />
        <variable name="key" type="String" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:text="list[index]:" />
        <TextView
            android:text="@{list[index]}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:text="sparse[index]:" />
        <TextView
            android:text="@{sparse[index]}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:text="map[key]:" />
        <TextView
            android:text="@{map[key]}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <View
            android:layout_marginTop="10dp"
            android:layout_marginBottom="10dp"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@android:color/black" />

        <TextView
            android:text='map["firstName"]'
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:text='@{map["firstName"]}'
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:text="map[`firstName`]"
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:text="@{map[`firstName`]}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:text="map[&quot;firstName&quot;]"
            android:textStyle="bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:text="@{map["firstName"]}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

</layout>


resource

package com.liangfeizc.databindingsamples.resources;

import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.liangfeizc.databindingsamples.BaseActivity;
import com.liangfeizc.databindingsamples.R;
import com.liangfeizc.databindingsamples.basic.User;
import com.liangfeizc.databindingsamples.databinding.ResourceBinding;

public class ResourceActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ResourceBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_resource);

        binding.setLarge(false);

        binding.setFirstName("liang");
        binding.setLastName("fei");

        binding.setBananaCount(5);
        binding.setOrangeCount(10);
    }
}


activity_resource
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data class="ResourceBinding">
        <variable name="large" type="boolean" />
        <variable name="firstName" type="String" />
        <variable name="lastName" type="String" />
        <variable name="bananaCount" type="int" />
        <variable name="orangeCount" type="int" />
    </data>

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

        <TextView
            android:padding="@{large? (int)@dimen/largePadding : (int)@dimen/smallPadding}"
            android:background="@android:color/black"
            android:textColor="@android:color/white"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
   <!--     android:text="@{@string/nameFormat(firstName, lastName)}"-->
        <TextView
            android:text="@{@string/nameFormat(firstName, lastName)}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
      <!--  android:textColor="@color/background_material_light"-->
        <TextView
            android:text="@{@plurals/banana(bananaCount)}"
            android:layout_width="wrap_content"
            android:textColor="@{large?@color/background_material_light:@color/white}"
            android:layout_height="wrap_content" />

        <TextView
            android:text="@{@plurals/orange(orangeCount, orangeCount)}"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</layout>
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值