来自CustomCursorAdapter的RunOnUIThread

Ari*_*Roy 5 multithreading android cursor android-activity

是)我有的

我有一个自定义光标适配器,我运行一个线程来执行一些升沉任务.

我想要的是

我希望在完成线程后更新UI,就像显示Toast一样.

我的问题

因为我在自定义游标适配器中,我无法让Activity使用runAnUiThread方法,如getActivity().runOnUiThread().Custom Cursor Adapter类只是一个Java类,而不是Activity或Fragment.

如何从CustomCursorAdapter获取Activity引用并执行runOnUiThread方法?

Sae*_*ani 7

您需要以某种方式将活动的引用传递给适配器.然后通过一些铸造或使用你可以调用的接口((YourActivity)context).runOnUiThread()

至于访问片段管理器,您需要进行相同的转换.

((YourActivity)context).getFragmentManager()
Run Code Online (Sandbox Code Playgroud)

但要注意!这不是一个好的设计模式.如果这context不是一项活动,你很快就会处理大量的NPE例外和事情.例如,ApplicationContext没有,getFragmentManager但是当您进行上面的转换时,您的IDE将不会通知您,当您在模拟器或设备上实际尝试时,您会发现它.

使用接口更安全,至少您知道您的活动具有实现的接口.


Ash*_*nki 5

晚了,但可以帮助我,我知道我已经在这里回答了,但是它可以帮助其他人

如果U具有Adapter (RecyclerView Adapter,Viewpager Adapter... etc)并且在此适配器中,则您正在使用AsyncTask,并且您想使用AsyncTask来更改数据

((Activity)contextObject).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    //change View Data
                }
            });
Run Code Online (Sandbox Code Playgroud)


小智 5

  ((AppCompatActivity) context).runOnUiThread(new Runnable() {
                                        @Override
                                        public void run() {

                                            //context.refreshInbox();
                                        }
                                    });
Run Code Online (Sandbox Code Playgroud)