我的Android成长之路(9)----黑科技dataBinding(二)

Android 安卓DataBinding(一)·基础 DataBinding 是谷歌官方发布的一个框架,其作用是实现数据绑定(Data binding),同时,也是因为有它,可以在安卓(Android)上实现MVVM架构。这样布局这边就算完事了,但是呢PeopleBean少了点什么呢,没错,就是他的信息,现在PeopleBean中所有的信息都还是null呢!但是,这样有时候避免不了import导入不同路径而相同的类名,此时呢,就要在import标签中用到alias属性了,就比如以下情况。在你的布局中找到最外层的布局,将光标放在如图位置。 阅读详情

昨天我们一起学习了dataBinding的基础用法,我想你可能还停留在它只是不用再findViewById,其实不然,今天我们就来扩展延伸,看看这个框架到底有什么魔力让谷歌官方大力推崇。这里还没看昨天的基础运用的需要去看一看,附上链接:http://blog.youkuaiyun.com/cuper_/article/details/53197106

项目已经同步至github:https://github.com/nanchen2251/databinding

昨天我们解决了简单的使用以及在xml中进行属性的变换和一些简单的表达式放在xml文件中的使用问题,大家肯定有所疑问,我们在实际开发中肯定会用到很多的布局重用等,那么在这个框架中可否同样做到呢?另外,如果我们想用这个框架实现图片加载呢?大家都知道图片在xml中只能通过src设置本地图片,并没有提供通过url设置的属性,别急,楼主会把这个方法分享给你。

1)首先把昨天的xml代码放到一个独立的xml文件中,楼主这里叫user_layout.xml,这里设置图片通过使用app自定义属性设置图片url

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <layout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     xmlns:app="http://schemas.android.com/apk/res-auto">
 6     <data>
 7         <variable
 8             name="user"
 9             type="com.example.nanchen.databindingdemo.User">
10         </variable>
11     </data>
12 
13     <LinearLayout
14         android:layout_width="0dp"
15         android:layout_weight = "1"
16         android:layout_height="match_parent"
17         android:gravity="center"
18         android:orientation="vertical"
19         tools:context="com.example.nanchen.databindingdemo.MainActivity">
20 
21         <ImageView
22             android:layout_width="100dp"
23             android:layout_height="100dp"
24             app:imageUrl="@{ user.icon }"/>
25 
26         <TextView
27             android:layout_width="wrap_content"
28             android:layout_height="wrap_content"
29             android:textSize="25sp"
30             android:onClick="@{user.clickName}"
31             android:textColor="@{user.vip? 0xffff0000:0xff000000}"
32             android:text="@{user.nickName + `(` + user.name +`)`}"/>
33 
34         <TextView
35             android:layout_width="wrap_content"
36             android:layout_height="wrap_content"
37             android:textSize="25sp"
38             android:onLongClick="@{user.longClickNickName}"
39             android:text="@{user.nickName ?? user.name}"/>
40 
41         <TextView
42             android:layout_width="wrap_content"
43             android:layout_height="wrap_content"
44             android:textSize="25sp"
45             android:textColor="@{user.level &lt; 3 ? 0xff03bbf9 : 0xfff60bdb }"
46             android:text="@{user.email}"/>
47     </LinearLayout>
48 </layout>
复制代码

2)然后修改主页面的xml文件,activity_main.xml,由于我们使用的是左右对称显示两个用户,所以我们应该用list,而不是之前的user,其中用到的尖括号用转义方法上一节已经讲过。

复制代码
<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <!--<variable-->
            <!--name="user"-->
            <!--type="com.example.nanchen.databindingdemo.User">-->
        <!--</variable>-->

        <import type="com.example.nanchen.databindingdemo.User"/>
        <variable
            name="users"
            type="java.util.List&lt;User&gt;"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="horizontal"
        tools:context="com.example.nanchen.databindingdemo.MainActivity">

        <include
            layout="@layout/user_layout"
            app:user="@{ users[0] }"/>

        <include
            layout="@layout/user_layout"
            app:user="@{ users[1] }"/>
    </LinearLayout>
</layout>
复制代码

 

3)再改下Activity的代码

复制代码
package com.example.nanchen.databindingdemo;

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

import com.example.nanchen.databindingdemo.databinding.ActivityMainBinding;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);

        ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        User user = new User();
        user.setName("刘世麟");
        user.setNickName("南尘");
        user.setEmail("liushilin@qq.com");
        user.setVip(true);
        user.setLevel(5);
        user.setIcon("http://qlogo1.store.qq.com/qzone/503233512/503233512/100?1311741184");
//        binding.setUser(user);

        User user1 = new User();
        user1.setName("春春儿");
        user1.setNickName(null);
        user1.setVip(false);
        user1.setEmail("nanchen@qq.com");
        user1.setLevel(1);
//        binding.setUser(user1);

        List<User> list = new ArrayList<>();
        list.add(user);
        list.add(user1);
        binding.setUsers(list);
//        binding.setUser(new User("刘世麟","南尘","liushilin@qq.com"));
    }
}
复制代码

看看运行效果

 

看到这里,也许小伙伴会说,切,不就一个include吗,这个框架还是没带来飞一般的感觉,别急,还有更厉害的使用ListView之类的等着你

我们来看看listView如何实现。

1)自然需要先定义一个list_item.xml,用于基本Item的布局。

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <layout
 4     xmlns:android="http://schemas.android.com/apk/res/android"
 5     xmlns:app="http://schemas.android.com/apk/res-auto">
 6     
 7     <data>
 8         <variable
 9             name="user"
10             type="com.example.nanchen.databindingdemo.User"/>
11     </data>
12 
13     <LinearLayout
14         android:layout_width="match_parent"
15         android:layout_height="match_parent"
16         android:orientation="horizontal"
17         android:onClick="@{ user.click }">
18         
19         <ImageView
20             android:layout_width="100dp"
21             android:layout_height="100dp"
22             app:imageUrl="@{user.icon}"/>
23 
24         <TextView
25             android:layout_width="match_parent"
26             android:layout_height="match_parent"
27             android:text="@{user.name}"
28             android:gravity="center"/>
29 
30     </LinearLayout>
31 </layout>
复制代码

2)写一个通用的适配器Adaper,注意这里和你以往写的ListView的适配器完全不一样,我们多了两个属性,一个是layoutId,一个是属性id

复制代码
 1 package com.example.nanchen.databindingdemo;
 2 
 3 import android.content.Context;
 4 import android.databinding.DataBindingUtil;
 5 import android.databinding.ViewDataBinding;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.BaseAdapter;
10 
11 import java.util.List;
12 
13 /**
14  * ListView的通用Adapter
15  * Created by 南尘 on 16-7-18.
16  */
17 public class CommonAdapter<T> extends BaseAdapter {
18     private Context context;//上下文环境
19     private List<T> list;//通用的,不知道数据
20     private int layoutId;//通用的,不知道布局
21     private int variableId;//变量的id
22 
23     /**
24      * 构造方法
25      */
26     public CommonAdapter(Context context, List<T> list, int layoutId, int variableId) {
27         this.context = context;
28         this.list = list;
29         this.layoutId = layoutId;
30         this.variableId = variableId;
31     }
32 
33     @Override
34     public int getCount() {
35         if (list!=null)
36             return list.size();
37         return 0;
38     }
39 
40     @Override
41     public Object getItem(int position) {
42         return list.get(position);
43     }
44 
45     @Override
46     public long getItemId(int position) {
47         return position;
48     }
49 
50     @Override
51     public View getView(int position, View convertView, ViewGroup parent) {
52         ViewDataBinding binding = null;
53         if (convertView == null){
54             binding = DataBindingUtil.inflate(LayoutInflater.from(context),layoutId,parent,false);
55         }else{
56             binding = DataBindingUtil.getBinding(convertView);
57         }
58         binding.setVariable(variableId,list.get(position));
59         return binding.getRoot();
60     }
61 }
复制代码

3)在xml中布局,这个比较简单,先在配置文件中把这个更改为程序入口,并且添加网络操作权限,这里用了BR文件,BR文件和R文件都是系统会自动生成的,只是R文件用于资源的id。图片我们就使用一个默认的

复制代码
 1 package com.example.nanchen.databindingdemo;
 2 
 3 import android.databinding.DataBindingUtil;
 4 import android.os.Bundle;
 5 import android.support.v7.app.AppCompatActivity;
 6 
 7 import com.example.nanchen.databindingdemo.databinding.ActivityDataBindingListBinding;
 8 
 9 import java.util.ArrayList;
10 import java.util.List;
11 
12 public class DataBindingListActivity extends AppCompatActivity {
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17 //        setContentView(R.layout.activity_data_binding_list);
18         ActivityDataBindingListBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_data_binding_list);
19 
20         List<User> list = new ArrayList<>();
21         for (int i = 0; i < 100; i++) {
22             User user = new User();
23             user.setName("用户 " + i );
24             user.setIcon("http://qlogo1.store.qq.com/qzone/503233512/503233512/100?1311741184");
25             list.add(user);
26         }
27         CommonAdapter<User> adapter = new CommonAdapter<>(
28                 this, list, R.layout.list_item, com.example.nanchen.databindingdemo.BR.user);
29         binding.setAdapter(adapter);
30 
31     }
32 
33 
34 }
复制代码

 

4)大概可以运行了哈。

 

5)如何添加点击事件呢?别慌,在我们的User中加入点击方法就好了。

复制代码
 1 package com.example.nanchen.databindingdemo;
 2 
 3 import android.view.View;
 4 import android.widget.Toast;
 5 
 6 /**
 7  * 继承,观察可刷新
 8  * Created by 南尘 on 16-7-18.
 9  */
10 public class User {
11     private String name;//用户名
12     private String nickName;//昵称
13     private String email;//邮箱
14 
15     private boolean vip;//是否是会员
16     private int level;//级别
17     private String icon;
18 
19     public String getIcon() {
20         return icon;
21     }
22 
23     public void setIcon(String icon) {
24         this.icon = icon;
25     }
26 
27     public int getLevel() {
28         return level;
29     }
30 
31     public void setLevel(int level) {
32         this.level = level;
33     }
34 
35     public boolean isVip() {
36         return vip;
37     }
38 
39     public void setVip(boolean vip) {
40         this.vip = vip;
41     }
42 
43     public User() {
44     }
45 
46     public User(String name, String nickName, String email) {
47         this.name = name;
48         this.nickName = nickName;
49         this.email = email;
50     }
51 
52     public String getEmail() {
53         return email;
54     }
55 
56     public void setEmail(String email) {
57         this.email = email;
58     }
59 
60     public String getName() {
61         return name;
62 
63     }
64 
65     public void setName(String name) {
66         this.name = name;
67     }
68 
69     public String getNickName() {
70         return nickName;
71     }
72 
73     public void setNickName(String nickName) {
74         this.nickName = nickName;
75     }
76 
77     public void clickName(View view){
78         Toast.makeText(view.getContext(),"点击了用户名:" + name,Toast.LENGTH_SHORT).show();
79     }
80 
81     public boolean longClickNickName(View view){
82         Toast.makeText(view.getContext(),"长按了昵称:"+nickName,Toast.LENGTH_SHORT).show();
83         return true;
84     }
85 
86     public void click(View view){
87         setName(getName() + "( 已点击 )");
88     }
89 }
复制代码

6)这里我们点击了用户2,什么情况?没刷新!!!!!,哦,哪里出了问题!

 

7)调皮的滑动了一下滚动条,再回去发现才刷新更改了。

9)e duo key,这里也太out了吧,说好的最屌框架呢?说好的要愉快一辈子呢?

仔细一看,才发现我们的逻辑中出了一点小问题,这样的话虽然你的list中的数据改变了,但是list并不知道,而这个adapter又没有刷新数据的方法,怎么办?

这里用到一个观察者模式,只需要把User继承BaseObservable类,并且在要更改的属性上加一个@Bindble,再在setName方法中加入这样一句话则可。

//刷新变量(变量id)
notifyPropertyChanged(com.example.nanchen.databindingdemo.BR.name);


复制代码
 1 package com.example.nanchen.databindingdemo;
 2 
 3 import android.databinding.BaseObservable;
 4 import android.databinding.Bindable;
 5 import android.view.View;
 6 import android.widget.Toast;
 7 
 8 /**
 9  * 继承,观察可刷新
10  * Created by 南尘 on 16-7-18.
11  */
12 public class User extends BaseObservable {
13     private String name;//用户名
14     private String nickName;//昵称
15     private String email;//邮箱
16 
17     private boolean vip;//是否是会员
18     private int level;//级别
19     private String icon;
20 
21     public String getIcon() {
22         return icon;
23     }
24 
25     public void setIcon(String icon) {
26         this.icon = icon;
27     }
28 
29     public int getLevel() {
30         return level;
31     }
32 
33     public void setLevel(int level) {
34         this.level = level;
35     }
36 
37     public boolean isVip() {
38         return vip;
39     }
40 
41     public void setVip(boolean vip) {
42         this.vip = vip;
43     }
44 
45     public User() {
46     }
47 
48     public User(String name, String nickName, String email) {
49         this.name = name;
50         this.nickName = nickName;
51         this.email = email;
52     }
53 
54     public String getEmail() {
55         return email;
56     }
57 
58     public void setEmail(String email) {
59         this.email = email;
60     }
61 
62     @Bindable
63     public String getName() {
64         return name;
65 
66     }
67 
68     public void setName(String name) {
69         this.name = name;
70         //刷新变量(变量id)
71         notifyPropertyChanged(com.example.nanchen.databindingdemo.BR.name);
72     }
73 
74     public String getNickName() {
75         return nickName;
76     }
77 
78     public void setNickName(String nickName) {
79         this.nickName = nickName;
80     }
81 
82     public void clickName(View view){
83         Toast.makeText(view.getContext(),"点击了用户名:" + name,Toast.LENGTH_SHORT).show();
84     }
85 
86     public boolean longClickNickName(View view){
87         Toast.makeText(view.getContext(),"长按了昵称:"+nickName,Toast.LENGTH_SHORT).show();
88         return true;
89     }
90 
91     public void click(View view){
92         setName(getName() + "( 已点击 )");
93     }
94 }
复制代码

10)再次运行:

 

现在好多了嘛,一点击就刷新了,是不是很吊?额,现在是点击整个item都可以刷新属性界面,好吧,其实无论你点击哪里,只要你加上这个click方法作为自定义属性,都可以实现这个功能,这里你要在原来的思路上实现是不是相当麻烦,而这个框架让你只需要移动一行代码的位置就可以,很高端大气上档次有木有?

这里做个示范,假如你是点击头像更改,只需要这样。

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <layout
 4     xmlns:android="http://schemas.android.com/apk/res/android"
 5     xmlns:app="http://schemas.android.com/apk/res-auto">
 6     
 7     <data>
 8         <variable
 9             name="user"
10             type="com.example.nanchen.databindingdemo.User"/>
11     </data>
12 
13     <LinearLayout
14         android:layout_width="match_parent"
15         android:layout_height="match_parent"
16         android:orientation="horizontal"
17         >
18         
19         <ImageView
20             android:layout_width="100dp"
21             android:layout_height="100dp"
22             app:imageUrl="@{user.icon}"
23             android:onClick="@{ user.click }"/>
24 
25         <TextView
26             android:layout_width="match_parent"
27             android:layout_height="match_parent"
28             android:text="@{user.name}"
29             android:gravity="center"/>
30 
31     </LinearLayout>
32 </layout>
复制代码

 

不仅可以放在这里,你还可以放在任何地方,无论是在ListView里面还是外面。

肯定这个框架还有其他的东西的,大家一起发掘咯~

转自南尘随笔

Jetpack之DataBinding,成长路线图 目前已经更新的部分资料:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android) 阅读详情

相关推荐

Android 安卓DataBinding(六)·双向绑定(4)

现在随着短视频,抖音,快手的流行NDK模块开发也显得越发重要,需要这块人才的企业也越来越多,随之学习这块的人也变多了,音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。

2401_84149339的博客 760

android黑科技——完美解决界面逻辑的数据框架DataBinding(最新)的使用(二)...

昨天我们一起学习了dataBinding的基础用法,我想你可能还停留在它只是不用再findViewById,其实不然,今天我们就来扩展延伸,看看这个框架到底有什么魔力让谷歌官方大力推崇。这里还没看昨天的基础运用的需要去看一看,附上链接:http://www.cnblogs.com/liushilin/p/5681473.html 项目已经同步至github:https://github.com/...

weixin_34138255的博客 112

Android 安卓DataBinding(六)·双向绑定(1)

首先是感觉自己的基础还是不够吧,大厂好像都喜欢问这些底层原理。之前的准备只涉及了Java、Android、计网、数据结构与算法这些方面,面对面试官对其他基础课程的考察显得捉襟见肘。下一步还是要查漏补缺,进行针对性复习。最后的最后,那套资料这次一定要全部看完,是真的太全面了,各个知识点都涵盖了,几乎我面试遇到的所有问题的知识点这里面都有!希望大家不要犯和我一样的错误呀!!!一定要看完!《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84123056的博客 825

android data binding实践之:ViewDataBinding

android data binding实践之:ViewDataBinding 使用过data binding的应该都知道,在编译之后,这个库会为我们生成两种java文件。 BR.java: 这个文件主要是给我们在XML文件中每个标签设置的variable以及被Bindable注解的属性添加一个静态的int类型的索引,在以后对这些variable进行操作的时候都可以使用这个索引id作为参数...

小火鸡的Android 1万+

【浙大翁恺】C语言习题

/* 02-0. 整数四则运算(10) 本题要求编写程序,计算2个正整数的和、差、积、商并输出。 题目保证输入和输出全部整型范围内。 输入格式: 输入在一行中给出2个正整数A和B。 输出格式: 在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。 输入样例: 3 2 输出样例: 3 + 2 = 5 3 - 2 = 1 3 * 2 = 6 3 / 2 =.

qq_43600867的博客 5853

Unity3d实现的十字路口的模拟(一)

最近学习了Unity3d这个游戏引擎,感觉真的是非常的强大,正好赶上操作系统课程要做一个模拟信号量的模拟程序,于是打算做一个模拟十字路口的程序,大致的实现要实现的成果是:存在四种不同的汽车,包括一辆警车(不受交通信号灯的控制)随机产生在不同的路口,并且有不同的行动路线如:直走,左转,右转等,当然还有交通信号灯来控制车辆的有序运行。可以展示不同的视角来观察路口的情况(利用Q,W,E,R分别控制不同的

永远在身边的专栏 7489

Android官方DataBinding(九):反向绑定,View变化结果回写进数据模型中

Android官方DataBinding(九):反向绑定,View变化结果回写进数据模型中Android DataBinding Data Model数据模型的变化,引发View的变化,反过来,如果View的变化,也将导致数据模型(Data Model)的变化。本例给出一个例子,说明这一双向绑定过程。附录文章大部分是单向绑定:数据模型的变化,引起View的变化。那么现在实行一个简单的功能,View

Zhang Phil 3903

手把手教你用RTL8306MB搭建小型网络交换机:从原理到实战

本文详细介绍了如何使用RTL8306MB交换芯片从零搭建小型网络交换机的全过程。内容涵盖芯片原理分析、核心硬件电路设计(包括电源、时钟、RMII接口连接要点)、驱动开发与SMI通信实现,以及从物理链路到交换功能的系统调试实战。重点解析了将MAC5配置为RMII PHY模式与CPU对接的关键步骤和常见错误,帮助嵌入式开发者深入理解网络交换原理并完成实践。

weixin_29274969的博客 192

Android官方数据绑定框架DataBinding

转自:http://blog.youkuaiyun.com/qibin0506/article/details/47393725 今天来了解一下android最新给我们带来的数据绑定框架——Data Binding Library。数据绑定框架给我们带来了更大的方便性,以前我们可能需要在Activity里写很多的findViewById,烦人的代码也增加了我们...

weixin_33949359的博客 1300

优化NEXYS A7开发板(Xilinx Artix-7)Microblaze核的FLASH读写性能实战

本文针对NEXYS A7开发板(Xilinx Artix-7)上Microblaze核读写FLASH速度慢的问题,提供了系统性的优化实战指南。通过深入分析SPI控制器配置、Flash指令模式选择、Microblaze核的Cache与硬件加速器优化,以及程序运行位置(BRAM vs DDR)的调整,有效将FLASH读写性能从“龟速”提升至接近理论峰值。文章结合实测数据,为FPGA嵌入式开发者提供了清晰的性能瓶颈分析与解决方案。

carrot的博客 256

python基础之语言发展历史

博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。 目录一、前言二、发展历史1、Python是一种面向对象的解释型编程语言2、Python常被称为胶水语言3、Python由Guido开发4、Python连续多年入选编程语言TOP105、Python的发展历史三、总结 一、前言   由于Python语言的简洁性、易读性以及可扩展性,它在网络爬虫、数据分析、.

jiankang66的博客 3348

基于dataBinding、RecyclerView.Adapter封装的BaseAdapter

BaseAdapter 基于dataBinding、RecyclerView.Adapter实现的BaseAdapter。 免去每次写adapter都需要使用DataBindingUtil.inflate()然后注入。 并且footView的也不用单独处理,只需要传入布局ID即可和关联数据即可。 footView也兼容了单列(LinearLayoutManager)多列(GridL...

qq_22845065的博客 1051

RK3588, 绘制中文OSD,实现左右对齐

基于RK3588,实现中文OSD, 上下左右对齐。

J。 661

Android 安卓DataBinding(六)·双向绑定

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人。

2401_85730792的博客 1243

第八届传智杯WPS智能办公能力挑战赛练习题库

本文是关于WPS Office软件操作知识的选择题汇总,内容涵盖WPS文字、表格和演示三大组件的常用功能。主要包括:云文档协同编辑、文本框插入、幻灯片打印设置、数据排序与筛选、函数应用(如SUMIF、COUNT)、动画效果设置、格式刷使用、页眉页脚设置、单元格引用类型等基础操作要点。同时涉及计算机基础概念如二进制、ROM存储器等。题目以单选和多选形式呈现,附带详细答案解析,全面检验用户对WPS办公软件的功能掌握程度和实际操作能力,适用于办公软件技能培训和水平测试。

qq_73044452的博客 1425

ESP32S3 TLS 握手WIFI可用但是在蜂窝热点下卡死:排查方法与根因

设备卡在等。

摸鱼专家 85

Android 安卓DataBinding(六)·双向绑定(2)

上一期讲到 两种集合和的使用方法,但是以上讲到的三种单向绑定的方法,却只能根据数据去刷新UI,但是考虑这种情况,如果UI刷新数据跟着刷新呢?这就需要用到双向绑定了!双向绑定现在要想到,在哪那些方面需要双向绑定,哪那些方面不需要双向绑定,生存还是死亡,这是个问题。在以上三个单向绑定案例中,貌似双向绑定没多大用处,下面举例一种情况,在输入账号和密码的时候,UI更新同时数据也要更新,这就用到双向绑定,总的来说,双向绑定使用还是不算多的,双向绑定是安卓MVVM架构的基础。

2401_84149256的博客 1146

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android架构之DataBinding(二)

通过前面的学习,相信大家对DataBinding有了一个初步的认识。接下来让我们去深入的学习下DataBinding。比如说下面这行代码 <TextView android:id="@+id/tvAuthor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{book.author}" android:padding ="@

qq_43404873的博客 1827

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android 安卓DataBinding(九)·运算符

运算符本篇讲的是在布局文件中使用运算符:| 运算符类型 | 运算符号 || — | — || 算术运算符 | + - * / % || 字符串合并操作 | + || 逻辑运算符 | && II || 一元运算符 | + -!~ || 二元运算符 | & I ^ || 三元运算符 |?: || 移位运算符 | >> >>> < = >=

2401_87256643的博客 803

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android 安卓DataBinding(八)·引用类方法

文章目录前景回顾引用类中的方法 前景回顾 Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Android 安卓DataBinding(四)·单向绑定 ObservableField Android 安卓DataBinding(五)·单向绑定 O...

两行代码 踏踏实实de工作 6928

Android 安卓DataBinding(五)·单向绑定 ObservableCollection(集合使用)

文章目录前景回顾单向绑定ObservableMapObservableMap 运行效果ObservableListObservableList 运行效果更新UI更新UI运行效果 前景回顾 Android 安卓DataBinding(一)·基础 Android 安卓DataBinding(二)·入门 Android 安卓DataBinding(三)·单向绑定 BaseObservable Andr...

两行代码 踏踏实实de工作 8974

2024年Android最全Android 安卓DataBinding(六)·双向绑定,安卓事件分发面试

这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容除了这份笔记,还给大家分享Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

2401_84556837的博客 988

Android Studio第12课关于databinding

📋 作者介绍:友友们好我是乱披风锤,大二学生党一枚 💖作者主页:乱披风锤的个人博客主页.乱披风锤 🔥我和友友们一样喜欢编辑,天天敲代码,沉迷学习,日渐消瘦。很荣幸能向大家分享我的所学,和大家一起进步。如果文章有错误,欢迎在评论区指正。那么开始今天的学习吧! 🎉 支持我:点赞👍+收藏⭐️+留言📝 Android Studio第12课关于databinding(学习打卡Day19)一、开启Databinding二、添加依赖三、打开网络权限四、生成databinding布局五、创建数据类六、在data变量中..

yi_chen_c的博客 6127
上一篇: 我的Android成长之路(8)----黑科技dataBinding(一)
下一篇: 我的Android成长之路(10)----利用recyclerView实现横向滑动
AImmortaI
博客等级 码龄11年 48粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值