2011-01-24 16 views
13

मैं एक Android आवेदन पर काम कर रहा हूँ, और जब मैं एक listview में डेटा की बड़ी मात्रा को प्रदर्शित करने का प्रयास, मैं निम्न त्रुटि प्राप्त:"ऑब्जर्वर ... पंजीकृत नहीं था" त्रुटि

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

किसी भी भाग्य:

अपने एडाप्टर में जोड़े? मुझे भी यही तकलीफ़ है। मुझे यकीन नहीं है कि क्यों कोई जवाब नहीं होने पर आउटिस आपको किसी भी उत्तर को स्वीकार करने के लिए कह रहा है: – odiggity

उत्तर

13

मैं यह त्रुटि भी मिली।
मेरे मामले इस अपवाद में (ऑब्जर्वर * पंजीकृत नहीं किया गया था।) फेंक दिया गया था क्योंकि मैं

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 मेल डॉट आरयू)

+6

आप इस समस्या को कैसे हल करते हैं? –

1

सूचीदृश्य से निपटने के दौरान मैं कई बार इस समस्या में भाग गया हूं। यदि आप एक संपादन एडाप्टर के साथ एक कस्टम एडाप्टर का उपयोग कर रहे हैं, तो आप एडाप्टर रीफ्रेश करने से पहले एक स्पष्ट फोकस() करना चाहेंगे। इस

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(); 
     } 
} 

तो इससे पहले कि आप अपने सूचीदृश्य आह्वान आप

CustomAdapter aa = new CustomAdapter(); 
if (aa != null) { 
    aa.unFocusAll(); 
} 
क्या करना है
+0

मुझे डर है कि आपके कोड उदाहरण बहुत स्पष्ट नहीं हैं। आपके unFocusAll() फ़ंक्शन में, v क्या है? इसके अतिरिक्त, कस्टम एडाप्टर की एक विधि unFocus है? आपको होल्डर क्लास को देखने की आवश्यकता क्यों है? –

0

मुझे आज भी यह समस्या थी और बाढ़ के जवाब ने मुझे इसे हल करने में मदद की। मेरे मामले में जब भी मैं अपने आवेदन पर किसी अन्य से वापस स्विच करता हूं तो त्रुटि दिखाई देगी, इसलिए विधि सेट एडाप्टर को दो बार बुलाया गया था।

इससे मुझे इसे से बचने:

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

धन्यवाद!

1

मुझे एक ही समस्या का सामना करना पड़ा और यह एक थ्रेडिंग मुद्दा बन गया। एकाधिक धागे setAdapter पर कॉल कर रहे थे जो थ्रेडसेफ प्रतीत नहीं होता है। यह सुनिश्चित करने के बाद कि सभी setAdapter कॉल एक ही थ्रेड पर किए जाते हैं, समस्या हल हो गई थी।

क्या मेरे लिए अच्छी तरह से काम किया, केवल यूआई धागे पर इसे बदलने के लिए मेरे कोड को मजबूर करना था:

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

मैंने इसे यूई थ्रेड पर चलाने के साथ भी तय किया। बस मेरे कोड को चलाने के अंदर ले जाया गया() {} – lxknvlk

0

टुकड़ा जो Viewpager
@Override
सार्वजनिक शून्य onDestroyView() में {
पर सुपर।onDestroyView();
viewDestroyed = true;
}

तो इससे पहले कि आप सेट अनुकूलक जांच
अगर (viewDestroyed)
pager.setAdapter (अनुकूलक)

सादर

0

सीधे शब्दों में ओवरराइड अपने एडाप्टर में onGroupCollapsed। इस के साथ

@Override 
public void onGroupCollapsed(int groupPosition) { 

} 
संबंधित मुद्दे