Android 使用回调或暂停活动生命周期修改视图

Android 使用回调或暂停活动生命周期修改视图,android,android-activity,android-recyclerview,callback,wait,Android,Android Activity,Android Recyclerview,Callback,Wait,我有一个应用程序需要加载其数据库。在加载数据库时,我会显示一条加载消息。加载完成后,我关闭加载消息并在数据库中显示项目列表,但我遇到了android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 基本上是因为是回调线程在触摸UI。loadList()基本上遍历数据库中的所有结果,并将其添加到视图/适配器中 public void onResume() { super.onResum

我有一个应用程序需要加载其数据库。在加载数据库时,我会显示一条加载消息。加载完成后,我关闭加载消息并在数据库中显示项目列表,但我遇到了
android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。

基本上是因为是回调线程在触摸UI。loadList()基本上遍历数据库中的所有结果,并将其添加到视图/适配器中

public void onResume() {
        super.onResume();
        if (!DbProvider.isDbAvailable()) {
            mNoResults.setText("Loading DB...");
            mNoResults.setVisibility(View.VISIBLE);
            mRecyclerView.setVisibility(View.GONE);
            DbProvider.setOnDbAvailableListener(() -> {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mNoResults.setText(R.string.no_results);
                    }
                });
                loadList(true);
            });
        } else {
            loadList(true);
        }
这是我的侦听器/回调

public interface OnDbAvailableListener {
        void onDbAvailable();
    }

    public static boolean isDbAvailable() {
        return mIsDbAvailable;
    }

    public static void setOnDbAvailableListener(OnDbAvailableListener listener) {
        synchronized (mIsDbAvailable) {
            if (mIsDbAvailable) {
                listener.onDbAvailable();
            } else {
                mOnDbAvailableListener = listener;
            }
        }
    }

    public static void setResultProvider(@NonNull IResultProvider ngStorage) {
        synchronized (mIsDbAvailable) {
            sResultProvider = ngStorage;
            mIsDbAvailable = true;
            if (mOnDbAvailableListener != null) {
                mOnDbAvailableListener.onDbAvailable();
            }
        }
    }

loadList也应该运行NuithRead,因为它在回调范围内