如何从事件监听器刷新Android UI?

时间:2014-02-22 02:19:02

标签: android events android-arrayadapter notifydatasetchanged

我有一个数据包监听器,可以检测数据包何时到达,当发生这种情况时我需要刷新ArrayAdapter。问题是,如果我尝试访问adapter.notifyDataSetChanged()方法,则抛出异常:

Exception in packet listener: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

假设您在一个可以访问应用程序上下文的对象中:

如果你在Activity

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        adapter.notifyDataSetChanged();
    }
});

如果你在Fragment

Activity act = getActivity();
if (act != null) {
    act.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            adapter.notifyDataSetChanged();
        }
    });
}

存在其他选项,例如looper / message handler等,但这是迄今为止最简单的。