Loading

即时通讯课设Android端问题记录

前言

转眼间,就已经是大四学生,目前正在写毕设。Android 端没有系统的学习过,都是哪里不会查哪里,基本靠度娘。所以,在此记录下课设开发过程中,Android 端遇到的问题。

刷新UI

在主线程刷新 UI 是没有问题的,但往往我们有时需要在非主线程里刷新 UI,这时你会发现,直接进行刷新是不生效的。

首先,如果你不知道当前线程到底是属于主线程还是子线程,可以使用 Looper.getMainLooper() == Looper.myLooper() 进行判断。

判断出当前线程是子线程后,进行刷新 UI 的方法有:

1.通过 Handler 的方式通知主线程去刷新 UI

比如 handler.post(),或者 sendMessage 方式。

该方法需要注意,如果 Handler 是在主线程,则可以直接使用,如果是子线程,则需要获取主线程的 Looper 和 Queue,即 Handler handler = new Handler(Looper.getMainLooper())

2.主动到主线程里刷新 UI,比如

runOnUiThread(new Runnable() {
    public void run() {
        //更新UI
    }
}

列表元素更新

notifyItemMovednotifyItemInsertednotifyItemRemoved 元素的插入、移动、删除,仅仅是元素的结构性变化,只会改变元素的位置,但元素的数据依然被认为是最新的。所以如果想更新元素的数据,需要再调用 notifyItemChanged。(参考源码方法上的注解)

posted @ 2022-04-11 21:36  flowers-bloom  阅读(50)  评论(0编辑  收藏  举报