“观察家......未注册”的错误
我工作的一个Android应用程序,当我尝试在listview
显示大量的数据,我收到以下错误:“观察家......未注册”的错误
01-24 18:06:32.214:
INFO/System.out(9244):
EX:Observer [email protected]
was not registered.
我也有这个错误。在我的情况下,这个异常
(观察员*未注册。)被抛出,因为我叫
setAdapter(Adapter)
多次。
例如:
MyAdapter (extends BaseAdapter) vla;
ListView lv;
for (int i = 0; i < 2; i++) {
vla.clear();
vla.add(tv);
lv.setAdapter(vla);
}
这里的解决方法是放置 v.setAdapter(vla);
外循环,从而避免了多个呼叫。
修复后没有更多的异常抛出。
最好的问候,洪水。 (fldr atincircle mail dot ru)
你如何解决这个问题? – 2013-06-19 10:39:20
我在处理列表视图时遇到过多次这个问题。如果您使用的是带有编辑文本的自定义适配器,则在刷新适配器之前,您需要先执行clearFocus()。 这是我的自定义适配器的观点持有者
class viewHolder {
public viewHolder() {
views = new ArrayList<viewInfo>();
}
public int position;
public ArrayList<viewInfo> views;
public View view;
}
这之后,我调用unfocusAll(:未注册观察员由列表视图删除已集中在活动
我是怎么做的孩子造成),其中包括:
public void unFocusAll() {
viewHolder holder = (viewHolder) v.getTag();
if (holder != null) {
holder.view.clearFocus();
}
}
所以你调用你的ListView之前,你需要做的
CustomAdapter aa = new CustomAdapter();
if (aa != null) {
aa.unFocusAll();
}
恐怕你的代码示例不是很清楚。在你的unFocusAll()函数中,什么是v?另外,unFocus是否是CustomAdapter的一个方法?为什么你甚至需要viewHolder类? – 2013-08-23 19:04:13
我今天也有这个问题,洪水的答案帮助我解决了这个问题。在我的情况下,每当我从另一个切换回我的应用程序时,都会显示错误,所以setAdapter方法总是被调用两次。
这帮助我避免它:
if (pager.getAdapter() == null){
pager.setAdapter(pagerAdapter);
}
谢谢!
我面临同样的问题,结果是一个线程问题。多线程调用setAdapter
这似乎不是线程安全的。确保所有setAdapter
调用在同一个线程上完成后,问题就解决了。
什么很好的工作对我来说,是迫使我的代码来改变它仅在UI线程:
runOnUiThread(new Runnable() {
@Override
public void run() {
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rc_view);
recyclerView.setAdapter(new MyAdapter(items));
}
});
我也修复它与UI线程上运行。简单地将我的代码移入run(){} – lxknvlk 2015-09-30 09:03:19
在其中包含Viewpager
@覆盖
公共无效onDestroyView()
片段{ 超。onDestroyView();
viewDestroyed = true;
}
然后设置之前适配器检查
如果(viewDestroyed)
pager.setAdapter(适配器)
问候
只需覆盖在适配器onGroupCollapsed。
添加到您的适配器:
@Override
public void onGroupCollapsed(int groupPosition) {
}
任何运气吗?我有同样的问题。我不确定为什么outis告诉你在没有答案时接受任何答案:s – odiggity 2011-10-12 14:26:31