2012-11-13 14 views
7

अपडेट नहीं कर रहा है मेरे पास एक कस्टम एडाप्टर के साथ एक सूची दृश्य है, जो डेटाबेस से जानकारी प्रदर्शित करता है। जब मैं ऐप शुरू करता हूं, तो एडाप्टर को दिया गया डेटा डेटाबेस से पढ़ा जाता है, जिसे सूचीव्यू से जोड़ा जाता है। एक लेआउटएनिमेशन कंट्रोलर सूची दृश्य पर चलाया जाता है, सामग्री को आसानी से प्रदर्शित करता है।एंड्रॉइड लिस्टव्यू

this._lvList = (ListView)_v.findViewById(R.id.lvList); 
    this._lvList.setAdapter(new TableAdapter(getActivity(),R.layout.tablerow,Category.getCategories())); 
    LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in_left)); 
    lac.setDelay(0.2f); 
    this._lvList.setLayoutAnimation(lac);  
    this._lvList.startLayoutAnimation(); 

कोई समस्या नहीं है।

अब जब मैं ListView की किसी भी प्रविष्टि पर क्लिक करता हूं, तो जिन प्रविष्टियों को क्लिक नहीं किया गया था, गायब हो जाते हैं, क्लिक की गई प्रविष्टि सूची में एकमात्र प्रविष्टि बन जाती है और उम्मीद के अनुसार शीर्ष पर प्रदर्शित होती है।

View v; 
for(int i = 0;i<_lvList.getChildCount();i++) { 
    v = this._lvList.getChildAt(i); 
    if(v!=clickedView) { 
      Animation animSlideOut = AnimationUtils.loadAnimation(getActivity(), i%2==0?R.anim.slide_out_left:R.anim.slide_out_right); 
      animSlideOut.setStartOffset(i*50); 

      // some more stuff 

    } 
    v.startAnimation(animSlideOut); 
} 

यह रूप में अच्छी तरह से काम करता है, लेकिन अब समस्या है, अगर मुझे लगता है कि एक सूची प्रविष्टि पर फिर से क्लिक करें, मैं सूची फिर से आबाद करना चाहते हैं, सभी आइटम फिर से प्रदर्शित।

मैंने सोचा कि मैं शुरुआत (पहला स्निपेट) से कोड का उपयोग कर सकता हूं, क्योंकि यह ऐप शुरू करते समय ठीक काम करता है, लेकिन ... इस बार ... ऐसा नहीं होता है। कोई एनीमेशन नहीं हो रहा है। कारण यह है कि, मेरी सूची दृश्य में एनिमेट करने के लिए कोई विचार नहीं है (पिछले चरण में से एक को छोड़कर)।

इसके बजाय एक नया TableAdapter मैं पहले से ही यह स्पष्ट करने की कोशिश की बनाने की

,,, यह नया, notifyDataSetChanged() ... कोई फायदा नहीं बुलाया भरने

_lvList.getChildCount(); 

चित्र रिटर्न 1 दृश्य के रूप में, जबकि एडाप्टर सभी 18 रखती है प्रविष्टियों। मैं भी

requestLayout(); 
forceLayout(); 
invalidate(); 
invalidateViews(); 

की कोशिश की एनीमेशन से पहले अपने बच्चे को देखा गया उत्पन्न करने के लिए ListView मजबूर करने के लिए है, लेकिन यह काम नहीं कर रहा। तो लिस्ट व्यू पर एटीएम तुरंत दिखाई देता है, कुछ समय बाद लेआउट एनीमेशन पर कॉल करने के बाद।

सारांश: मेरी सूची दृश्य में लेआउट एनीमेशन की शुरुआत से पहले कोई बच्चा दृश्य नहीं है, मैं इसे उत्पन्न करने के लिए इसे कैसे मजबूर कर सकता हूं? अग्रिम :) में

Thx

+0

क्या आपने इस मुद्दे को हल किया है? – dexxtr

+0

@dexxtr क्षमा करें, यह बहुत समय पहले था, लेकिन अंत में मैं एक अलग एनीमेशन के साथ बस गया, क्योंकि कोड अपेक्षित काम नहीं कर रहा था ... –

+0

मैंने पहले से ही तय कर लिया है :) समस्या गलत संदर्भ में थी, जिसमें एक अन्य स्क्रीन – dexxtr

उत्तर

1

हम्म ... आप अभी तक यह किया है?

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    //the position of the item, the convertView is the view layout of what that row is 

} 

बदलने का तरीका सूचीदृश्य अद्यतन किया जाता है: (नीचे)

अपने कस्टम अनुकूलक में

, विधि ओवरराइड। इस getView विधि एंड्रॉयड से बुलाया जाता है हर एक बार थोड़ी देर के दृश्य को ताज़ा करने के (आप इसे मैन्युअल फोन नहीं है)

भी, मुझे लगता है कि आप केवल अद्यतन के लिए मजबूर करने

listView.notifiyDataSetChanged() और listView.invalidate() कॉल करने के लिए, के बाद की जरूरत है आप सूची फिर से आबाद

आप यहाँ listviews के बारे में अधिक पढ़ सकते हैं:

http://www.vogella.com/articles/AndroidListView/article.html

http://developer.android.com/guide/topics/ui/layout/listview.html

+0

हां, मेरे पास एक कस्टम एडाप्टर है और मेरे पास getView() है। जब मैं ऐप शुरू करता हूं तो यह सब काम करता है, बस दूसरी बार नहीं। सूचित करने के बाद ...() और अमान्य() सूची दृश्यों के विचारों की गिनती अभी भी 1 है, जबकि एडाप्टर में 18 प्रविष्टियां हैं। –

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