2011-01-24 8 views
13

Estoy trabajando en una aplicación para Android, y cuando intento para mostrar grandes cantidades de datos en un listview, recibo el siguiente error:"Observador ... no estaba registrada" error

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

Ha habido suerte con esto? Estoy teniendo el mismo problema. No estoy seguro de por qué Outis le está diciendo que acepte cualquier respuesta aquí cuando no haya respuestas: s – odiggity

Respuesta

13

i tengo este error también
en mi caso esta excepción (Observador * no estaba registrado.) Fue lanzado porque llamé

setAdapter(Adapter) 

varias veces.

por ejemplo:

MyAdapter (extends BaseAdapter) vla; 
ListView lv; 

for (int i = 0; i < 2; i++) { 
    vla.clear(); 
    vla.add(tv); 
    lv.setAdapter(vla); 
} 

La solución aquí es colocar
v.setAdapter(vla);
fuera del bucle, evitando de este modo varias llamadas.

después de corregir no más tiradas de excepción.
saludos cordiales, inundaciones. (fldr atincircle mail dot ru)

+6

¿Cómo soluciona el problema? –

1

Me he encontrado con este problema varias veces al tratar con listviews. Si está utilizando un adaptador personalizado con un texto de edición involucrado, querrá hacer un clearFocus() antes de actualizar el adaptador. Observador no registrada se debe a la vista de lista eliminación de un niño que se centrará en la actividad

Cómo lo hago: este es el titular de la vista para mi adaptador personalizado

class viewHolder { 
    public viewHolder() { 
     views = new ArrayList<viewInfo>(); 
    } 

    public int position; 
    public ArrayList<viewInfo> views; 
    public View view; 
} 

Después de lo cual invoco unfocusAll () que consiste en:

public void unFocusAll() { 
    viewHolder holder = (viewHolder) v.getTag(); 
     if (holder != null) { 
      holder.view.clearFocus(); 
     } 
} 

Así que antes de invocar su vista de lista que tiene que hacer

CustomAdapter aa = new CustomAdapter(); 
if (aa != null) { 
    aa.unFocusAll(); 
} 
+0

Me temo que los ejemplos de tu código no son muy claros. En su función unFocusAll(), ¿qué es v? Además, ¿es unFocusAll un método de CustomAdapter? ¿Por qué siquiera necesitas la clase viewHolder? –

0

Tuve este problema hoy también y la respuesta de flood me ayudó a resolverlo. En mi caso, el error aparecía cada vez que cambiaba a mi aplicación desde otra, por lo que el método setAdapter siempre se llamaba dos veces.

Esto me ayudó a evitar que:

if (pager.getAdapter() == null){ 
    pager.setAdapter(pagerAdapter); 
} 

Gracias!

1

Me enfrenté al mismo problema y resultó ser un problema de enhebrado. Varios hilos llamaban al setAdapter, lo que no parece ser seguro para los hilos. Después de asegurarse de que todas las llamadas a setAdapter se realicen en el mismo subproceso, se solucionó el problema.

Lo que funcionó muy bien para mí, era forzar mi código para cambiarlo sólo en el hilo de interfaz de usuario:

runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rc_view); 
       recyclerView.setAdapter(new MyAdapter(items)); 
      } 
     }); 
+0

También lo solucioné con un hilo ui. Simplemente moví mi código dentro de la ejecución() {} – lxknvlk

0

al fragmento que contiene el ViewPager
@ Override
pública onDestroyView void() {
super.onDestroyView();
viewDestroyed = true;
}

continuación, antes de configurar el adaptador de verificación
si (viewDestroyed)
pager.setAdapter (adaptador)

mejores deseos

0

Simplemente anulación de su adaptador onGroupCollapsed.

Añadir a su adaptador:

@Override 
public void onGroupCollapsed(int groupPosition) { 

} 
Cuestiones relacionadas