2011-02-09 16 views
12

में getView() की एकाधिक कॉलिंग मेरी गतिविधि में ग्रिड व्यू शामिल है जिसमें 40+ तत्व हैं। गतिविधि शुरू करने के बाद उपयोगकर्ता अधिकतम 15 आइटम (3 पंक्तियां, प्रत्येक पंक्ति में 5 आइटम) देख सकता था। मैं getView में() शरीर लिखा हो रही दृश्य के LogCat नंबर करने के लिए पारित करने के लिए:ग्रिड व्यू

Log.i("getView()", "GETTING VIEW_POSITION[" + String.valueOf(position) + "]" + (convertView != null?convertView.toString():"null")); 

मेरे ऐप शुरू करने के बाद मैं ऐसे लॉग मिलती है:

02-09 14:34:56.900: INFO/getView()(388): GETTING VIEW_POSITION[0]null 
02-09 14:34:57.300: INFO/getView()(388): GETTING VIEW_POSITION[0][email protected] 
02-09 14:34:57.300: INFO/getView()(388): GETTING VIEW_POSITION[1]null 
02-09 14:34:57.400: INFO/getView()(388): GETTING VIEW_POSITION[2]null 
02-09 14:34:57.510: INFO/getView()(388): GETTING VIEW_POSITION[3]null 
02-09 14:34:57.620: INFO/getView()(388): GETTING VIEW_POSITION[4]null 
02-09 14:34:57.720: INFO/getView()(388): GETTING VIEW_POSITION[5]null 
02-09 14:34:57.840: INFO/getView()(388): GETTING VIEW_POSITION[6]null 
02-09 14:34:57.930: INFO/getView()(388): GETTING VIEW_POSITION[7]null 
02-09 14:34:58.273: DEBUG/dalvikvm(388): GC freed 3530 objects/322744 bytes in 270ms 
02-09 14:34:58.280: INFO/getView()(388): GETTING VIEW_POSITION[8]null 
02-09 14:34:58.300: INFO/getView()(388): GETTING VIEW_POSITION[9]null 
02-09 14:34:58.320: INFO/getView()(388): GETTING VIEW_POSITION[10]null 
02-09 14:34:58.340: INFO/getView()(388): GETTING VIEW_POSITION[11]null 
02-09 14:34:58.360: INFO/getView()(388): GETTING VIEW_POSITION[12]null 
02-09 14:34:58.380: INFO/getView()(388): GETTING VIEW_POSITION[13]null 
02-09 14:34:58.400: INFO/getView()(388): GETTING VIEW_POSITION[14]null 
02-09 14:34:59.220: INFO/getView()(388): GETTING VIEW_POSITION[0]null 
02-09 14:34:59.490: INFO/getView()(388): GETTING VIEW_POSITION[0][email protected] 

मैं भी लाल this मुद्दा इस तरह के बारे में पोस्ट । लेकिन भरने अभिभावक के रूप में सेट एक्सएमएल विवरण में मेरे GridView की ऊंचाई:

public class ImageAdapter extends BaseAdapter 
    { 
     private Activity activity; 
     private LayoutInflater inflater = null; 
     private ArrayList<Photo> photoes; 

     public ImageAdapter(Activity a, ArrayList<Photo> pictures) 
     { 
      photoes = pictures; 
      activity = a; 
      inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      Log.i("getView()", "GETTING VIEW_POSITION[" + String.valueOf(position) + "]" + (convertView != null?convertView.toString():"null")); 
       View mViewSlice = convertView; 
       if(convertView == null) { 
        mViewSlice = inflater.inflate(R.layout.photo_preview, null); 
        ((TextView) mViewSlice.findViewById(R.id.name_of_photo)).setText(photoes.get(position).getName()); 

        mViewSlice.setPadding(5, 5, 5, 5); 
        mViewSlice.setLayoutParams(new GridView.LayoutParams(-2, -2)); 

       } 



       return mViewSlice; 
     } 

     @Override 
     public int getCount() { 
      return photoes.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return photoes.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 
    } 

मुझे आशा है कि किसी को मेरी समस्या पर जवाब देंगे और मदद मिलेगी:

<?xml version="1.0" encoding="utf-8"?> 

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/grid" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:numColumns="auto_fit" 
       android:horizontalSpacing="10dp" 
       android:verticalSpacing="10dp" 
       android:columnWidth="140dp" 
       android:gravity="center" 
       android:scrollbars="none" 
       /> 

और अंत में सभी संदेहों को दूर करने के लिए, यहाँ मेरी एडाप्टर कोड है मुझे इसे हल करने के लिए।

आपके सुझावों की प्रतीक्षा कर रहा है। एलेक्स।

+1

आपका प्रश्न क्या है? –

उत्तर

10

कि लिंक करता है, तो काफी स्पष्ट मुझे लगता है कि

बिल्कुल पर कोई गारंटी नहीं है समय की संख्या getView() किसी भी स्थिति

के लिए लागू अब यह हो जाएगा नहीं है पर प्रतिक्रिया टिप्पणी का भी अर्थ है कि आपको wrap_content

आमतौर पर सूचियों और ग्रिडके साथ होता हैजिसमें wrap_content

पर ऊंचाई ऊंचाई सेट है लेकिन इसका मतलब यह नहीं है कि यह अन्य स्थितियों के लिए नहीं होगा। बग को "वर्किंगएसइंटेड" के रूप में बंद कर दिया गया था, इसलिए मुझे नहीं लगता कि आप बहुत कुछ कर सकते हैं। यह कुछ ऐसा हो सकता है जो हो सकता है।

+1

रोमेन ने किसी दिए गए पद के लिए कहा। लेकिन मुझे यकीन है कि, मैं पहले व्यक्ति नहीं हूं जिसने ग्रिड व्यू में केवल पहली स्थिति में आवेदन करने में यह समस्या पाई। और मैं फिर से दोहराता हूं, जैसा कि आप मेरे एक्सएमएल से देख सकते हैं, मैं wrap_content का उपयोग नहीं करता हूं। – teoREtik

+0

मेरा कहना है कि रैप_कंटेंट का उल्लेख होने के बावजूद, ऐसा कुछ भी नहीं है ** ** कभी भरने वाला नहीं है। तो आपने जो कहा है उसे दोहराने की कोई जरूरत नहीं है, मैंने आपको पहली बार मिला। मैं सहमत नहीं हूं कि यह मायने रखता है: डी। अब यह केवल पहली स्थिति क्यों है जिसे मैं नहीं जानता, लेकिन पहली स्थिति "किसी दिए गए स्थान" का हिस्सा है। इसलिए जब मैंने जवाब पढ़ा, तो यह अभी भी अपेक्षित व्यवहार है। – Nanne

+0

क्या आप समझा सकते हैं, कहने पर आपका क्या मतलब है, कि पहली स्थिति किसी दिए गए स्थान का हिस्सा है? – teoREtik

-6

मैं एक ही समस्या थी, मेरे समाधान एडाप्टर के बाहर ऐसा ही कुछ एक सूची बनाने के लिए है, तो एडाप्टर सूची देने के लिए, था:

class MyAdapter extends BaseAdapter{ 

    List<View> views; 

    public MyAdapter(List<View> views){ 
     this.views = views; 
    } 

    ... 

    public View getView(int position, View convertView, ViewGroup parent){ 
     return views.get(position);  // now your safe even if element[0] is called n times 
    } 
} 

class MyActivity extends Activity{ 

    GridView grid; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     List<View> views = create_your_views(): 

     MyAdapter adapter = new MyAdapter(views); 

     grid.setAdapter(adapter);   
    } 
} 
+1

यह एडाप्टर में डेटा सेट करने का सामान्य तरीका है और वर्णित समस्या से कोई संबंध नहीं है। – Ixx

6

मेरे लिए, यह और भी बदतर है: 0 स्थिति है अक्सर 10 बार कहा जाता है। और यह भी कहा जाता है कि अगर मैं सूची के अंत में हूं, तो स्क्रीन पर 0 स्थिति के बिना।

मेरा समाधान वर्तमान में डिस्प्ले के लिए संसाधित किए जा रहे आइटमों की एक स्थिर ऐरेलिस्ट है और मैं उन डबल-कॉल को अनदेखा करता हूं। यह सबसे अच्छा समाधान नहीं है हालांकि यह अभी भी 0 स्थिति पाने के लिए संसाधनों का उपयोग करता है, जबकि यह स्क्रीन पर भी नहीं है।

जैसा कि यह एक बग की तरह लगता है, मुझे लगता है कि मैं स्थिति 0 के लिए एक दृश्य कैश करूँगा, इसलिए स्थिति स्क्रीन पर नहीं होने पर भी एक त्वरित और उचित वापसी मूल्य प्राप्त होगा।

एंड्रॉइड 4.2.2।

+0

फिर आप भाग्यशाली हैं, मेरे मामले में इसे स्थिति 0 के लिए 33 बार कहा जाता है। जैसा कि आपने कहा था, मैं कैश को 0 के लिए लागू कर दूंगा। – Corbella

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