android项目实战之数据绑定的数据更新

2023-12-15 11:25:04

引言

早期的界面数据更新,有多种方式。UI的更新必须在主线程中完成,所以不管上述那种方法,都是将更新UI的消息发送到了主线程的消息对象,让主线程做处理;

1.?Handler?

Handler mHandler = new Handler() {

        @Override  
        public void handleMessage(Message msg) {  
            super.handleMessage(msg);  
            switch (msg.what) {  
            case 0:  
                //完成主界面更新,拿到数据  
                String data = (String)msg.obj;  
                  
                updateWeather();  
                textView.setText(data);  
                break;  
            default:  
                break;  
            }  
        }  
      
    };

2.?子线程发消息,通知Handler完成UI更新:

private void updateWeather() {          
        new Thread(new Runnable(){  
      
            @Override  
            public void run() {  
                //耗时操作,完成之后发送消息给Handler,完成UI更新;  
                mHandler.sendEmptyMessage(0);  
                  
                //需要数据传递,用下面方法;  
                Message msg =new Message();  
                msg.obj = "数据";//可以是基本类型,可以是对象,可以是List、map等;  
                mHandler.sendMessage(msg);  
            }         
        }).start();       
    }

3.?runOnUiThread方法更新

new Thread() {  
            public void run() {  
                //这儿是耗时操作,完成之后更新UI;  
                runOnUiThread(new Runnable(){  
?
                    @Override  
                    public void run() {  
                        //更新UI  
                        imageView.setImageBitmap(bitmap);  
                    }  
                      
                });  
            }  
}.start();

4.?View.post(Runnable r)

imageView.post(new Runnable(){  
?
                    @Override  
                    public void run() {  
                        imageView.setImageBitmap(bitmap);  
                    }  
                      
                });

改进方式

?使用数据绑定方式

1.? 可观察对象,如

    private static class User extends BaseObservable {
        private String firstName;
        private String lastName;

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

        @Bindable
        public String getLastName() {
            return this.lastName;
        }

        public void setFirstName(String firstName) {
            this.firstName = firstName;
            notifyPropertyChanged(BR.firstName);
        }

        public void setLastName(String lastName) {
            this.lastName = lastName;
            notifyPropertyChanged(BR.lastName);
        }
    }

    

2. XML布局使用,如图

<data>
        <import type="android.databinding.ObservableMap"/>
        <variable name="user" type="ObservableMap<String, Object>"/>
    </data>
    …
    <TextView
        android:text="@{user.lastName}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView
        android:text="@{String.valueOf(1 + (Integer)user.age)}"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    

?欢迎点赞、收藏、评论。

文章来源:https://blog.csdn.net/sccd2009/article/details/135008856
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。