“观察家......未注册”的错误

问题描述:

我工作的一个Android应用程序,当我尝试在listview显示大量的数据,我收到以下错误:“观察家......未注册”的错误

01-24 18:06:32.214: 
INFO/System.out(9244): 
    EX:Observer [email protected] 
    was not registered. 
+1

任何运气吗?我有同样的问题。我不确定为什么outis告诉你在没有答案时接受任何答案:s – odiggity 2011-10-12 14:26:31

我也有这个错误。在我的情况下,这个异常
(观察员*未注册。)被抛出,因为我叫

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)

+6

你如何解决这个问题? – 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(); 
} 
+0

恐怕你的代码示例不是很清楚。在你的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)); 
      } 
     }); 
+0

我也修复它与UI线程上运行。简单地将我的代码移入run(){} – lxknvlk 2015-09-30 09:03:19

在其中包含Viewpager
@覆盖
公共无效onDestroyView()
片段{ 超。onDestroyView();
viewDestroyed = true;
}

然后设置之前适配器检查
如果(viewDestroyed)
pager.setAdapter(适配器)

问候

只需覆盖在适配器onGroupCollapsed

添加到您的适配器:

@Override 
public void onGroupCollapsed(int groupPosition) { 

}