• 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在实时更新了。

    效果图:待录制

     

  • 相关阅读:
    .NET5 ABP框架(二)- WebApi
    找不到版本为(>=2.0.3)的包NETStandard.Library -在 Microsoft Visual Stduio Offine Packages 中找到2个版本[ 最接近:1.6.1 ]
    .NET5 ABP框架(一)
    开学第一节课
    开学考试
    参考:
    安装git
    org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083.
    hive insert 出现问题
    hive开启远程连接方法
  • 原文地址:https://www.cnblogs.com/zhangqie/p/9368785.html
Copyright © 2020-2023  润新知