zoukankan      html  css  js  c++  java
  • android -------- Data Binding的使用(二)

    分享一下Data Binding在项目中一些常用的基础,点击事件和输入框的一些操作。

    DataBinding允许我们在xml中view的一些事件属性(如onClick等)中填写DataBinding表达式,也可以通过绑定listener的方式去实现。

    首先写一个类来表示点击事件

     public class Presenter{public void onClick(View view){
                Toast.makeText(MainActivity.this,"123",Toast.LENGTH_LONG).show();
            }
    
            public void onClickDataBinding(Employee employee){
                Toast.makeText(MainActivity.this,employee.getLastName(),Toast.LENGTH_LONG).show();
            }
        }

    布局文件则:(data中添加该类Presenter)

        <data>
         
            <variable
                name="presenter"
                type="com.zhangqie.databinding.demo1.MainActivity.Presenter"/>
        </data>

    事件代码:

       <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="点击事件"
           android:onClick="@{presenter::onClick}"
            />
            <!-- android:layout_margin="@{@dimen/n1 + @dimen/n2}"-->
        <Button
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="点击事件传值"
           android:onClick="@{() -> presenter.onClickDataBinding(employee)}"
          />

    这样我们的事件绑定就完成了,运行起来效果就和往常的一样了。

    接下来说的就是 输入框EditText中输入自动刷新数据,ObservableArrayMap,ObservableArrayList

    首先创建一个User类

    public class User extends BaseObservable {
    
        public User(String frstName,String lastName){
            this.frstName = frstName;
            this.lastName = lastName;
            observableArrayMap.put("zq","zhhhhh");
            list.add("aaa");
            list.add("bbb");
        }
    
        private String frstName;
    
        private String lastName;
    
        public ObservableArrayMap<String,String> observableArrayMap = new ObservableArrayMap<>();
    
        public ObservableArrayList<String> list = new ObservableArrayList<>();
    
        @Bindable
        public String getFrstName() {
            return frstName;
        }
    
    
        public void setFrstName(String frstName) {
            this.frstName = frstName;
            //指定刷新UI
            notifyPropertyChanged(com.zhangqie.databinding.BR.frstName);
        }
    
        @Bindable
        public String getLastName() {
            return lastName;
        }
    
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
            //全部刷新
            //notifyChange();
        }
    }

    可以看到 刷新数据操作,ObservableArrayMap,ObservableArrayList

    再添加一个输入框的事件监听类

      public class Presenter{
    
            public void onTextChanged(CharSequence s, int start, int before, int count){
                user.setFrstName(s.toString());
            }
    
        }

    布局文件:(布局中有 添加 ObservableArrayMap 数据和  ObservableArrayList的数据了)

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
    
            <variable
                name="user"
                type="com.zhangqie.databinding.demo2.User" />
    
            <variable
                name="presenter"
                type="com.zhangqie.databinding.demo2.Demo2.Presenter" />
        </data>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:onTextChanged="@{presenter.onTextChanged}" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.frstName}" />
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text='@{user.observableArrayMap["zq"]}' />
    
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text='@{user.list[0]}' />
    
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{user.list[1]}" />
        </LinearLayout>
    
    </layout>

    Activity类

    public class Demo2 extends AppCompatActivity {
    
    
        User user = new User("切切歆语","mis");
    
        DemoActivityBinding binding;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
          
            binding = DataBindingUtil.setContentView(this, R.layout.demo_activity);
            binding.setPresenter(new Presenter());
            binding.setUser(user);
    
        }
    
        //输入框监听
        public class Presenter{
    
            public void onTextChanged(CharSequence s, int start, int before, int count){
                user.setFrstName(s.toString());
            }
        }
    }

    当输入信息是就可以看见第一个TextView在实时更新了。

    效果图:待录制

     

  • 相关阅读:
    Wyn Enterprise报表动态参数的实现
    全功能 Visual Studio 组件集 ComponentOne 2018V2发布,提供轻量级的 .NET BI 仪表板
    葡萄城SpreadJS表格控件荣获“2018年度优秀软件产品”称号
    中国电建:ComponentOne+Spread突破行业桎梏,推动数据产业“智能化”变革
    葡萄城活字格 Web 应用生成平台荣获软博会十佳优秀产品
    石油与天然气行业中数据报表分析
    从容 IT 人生路,开发工具伴我行——“葡萄城 30 周年”征文
    用WijmoJS玩转您的Web应用 —— Angular6
    对抗海量表格数据,【华为2012实验室】没有选择复仇者联盟
    投票最喜欢报表模板,赢取复联3正版玩偶
  • 原文地址:https://www.cnblogs.com/zhangqie/p/9368785.html
Copyright © 2011-2022 走看看