2012-04-23 18 views
5

मैं एंड्रॉइड बाजार की तरह ग्रिडव्यू बनाना चाहता हूं, मैं इसे इंटरनेट पर डेटाबेस से छवियों के साथ पॉप्युलेट करना चाहता हूं। इसे androidv4.support के साथ काम करने की आवश्यकता है, क्योंकि मैं 2.2 तक 4.0 रन करना चाहता हूं।कैसे करें: एक टुकड़े के अंदर ग्रिडव्यू?

किसी ने कहा, प्री-4.0 में ग्रिडव्यू बनाना संभव नहीं है, क्या यह सच है?

हालांकि यह केवल तभी काम करता है जब मैं setListAdapter() का उपयोग करता हूं, लेकिन यह एक सूचीदृश्य की तरह प्रति पंक्ति केवल एक छवि दिखाता है, जब मैं gridview.setAdapter() में बदलता हूं, तो यह अब और काम करता है।

यह ListFragment वर्ग है:

public static class ArrayListFragment extends ListFragment implements OnScrollListener{ 

     ImageAdapter adapter = new ImageAdapter(); 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 


       LayoutInflater gridInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       View v = gridInflater.inflate(R.layout.imagelist, null); 
       GridView gridView = (GridView) v.findViewById(R.id.list); 




      ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT; 
//   ImageAdapter imageAdapter = new ImageAdapter(); 
      adapter.getImageDownloader().setMode(mode); 
      setListAdapter(adapter); 
//   gridView.setAdapter(adapter); 
      getListView().setOnScrollListener(this); 

     } 

यह वह जगह है ImageAdapter वर्ग:

public class ImageAdapter extends BaseAdapter { 

      private Context mContext; 

     private final ImageDownloader imageDownloader = new ImageDownloader(); 

      public static int count = 10; 

private final String[] URLS = { 
     "http://lh5.ggpht.com/_mrb7w4gF8Ds/TCpetKSqM1I/AAAAAAAAD2c/Qef6Gsqf12Y/s144-c/_DSC4374%20copy.jpg", 
     "http://lh5.ggpht.com/_Z6tbBnE-swM/TB0CryLkiLI/AAAAAAAAVSo/n6B78hsDUz4/s144-c/_DSC3454.jpg", 
     "http://lh3.ggpht.com/_GEnSvSHk4iE/TDSfmyCfn0I/AAAAAAAAF8Y/cqmhEoxbwys/s144-c/_MG_3675.jpg", 
     "http://lh6.ggpht.com/_Nsxc889y6hY/TBp7jfx-cgI/AAAAAAAAHAg/Rr7jX44r2Gc/s144-c/IMGP9775a.jpg", 
     "http://lh3.ggpht.com/_lLj6go_T1CQ/TCD8PW09KBI/AAAAAAAAQdc/AqmOJ7eg5ig/s144-c/Juvenile%20Gannet%20despute.jpg", 
     }; 

      public int getCount() { 
       return count; 
      } 

      public String getItem(int position) { 
       return URLS[position]; 
      } 

      public long getItemId(int position) { 
       return URLS[position].hashCode(); 
      } 
     public View getView(int position, View convertView, ViewGroup parent) { 
       View v; 

       if (convertView == null) { 
        v = LayoutInflater.from(mContext).inflate(R.layout.image_text_view,null); 
        v.setLayoutParams(new GridView.LayoutParams(200,200)); 

        ImageView imageview = (ImageView)v.findViewById(R.id.image); 
        imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); 
        imageview.setPadding(6, 6, 6, 6); 
        imageDownloader.download(URLS[position], imageview); 
       } 
      else { 
       v = convertView; 
      } 

       return v; 
      } 

      public ImageDownloader getImageDownloader() { 
       return imageDownloader; 
      } 
    } 

यह एक बहुत मदद कर सकता है अगर किसी को भी एक नमूना है

यहाँ मेरी कोशिश है। धन्यवाद

उत्तर

8

यह ठीक काम करना चाहिए, तुम सिर्फ एक ListFragment में एक GridView उपयोग नहीं कर सकते - बस के बजाय एक सादे पुराने Fragment उपयोग करते हैं, तो आप मैन्युअल रूप ग्रिड वैसे भी

इसके अलावा, बिंदु प्रबंध करने जा रहे हैं, तो कनवर्ट करना व्यू नल है रीसाइक्लिंग देखने के लिए है - ओएस केवल स्क्रीन भरने के लिए पर्याप्त दृश्य घोषित करता है और नहीं, इसलिए यदि आप स्क्रॉल करते हैं तो यह एक नया फुलाए रखने के बजाय दृश्य का पुन: उपयोग कर सकता है। अपने getView() ऊपर बदलें ताकि लाभ लेने के लिए की तरह:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v; 

    if (convertView == null) { 
    v = LayoutInflater.from(mContext).inflate(R.layout.image_text_view,null); 
    v.setLayoutParams(new GridView.LayoutParams(200,200)); 
    } 
    else { 
    v = convertView; 
    } 

    ImageView imageview = (ImageView)v.findViewById(R.id.image); 
    imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageview.setPadding(6, 6, 6, 6); 
    imageDownloader.download(URLS[position], imageview); 

    return v; 
} 

इसके अलावा, getView BaseAdapter के एक समारोह नहीं है, बजाय ArrayAdapter जाने की कोशिश करें। एक तरफ ध्यान दें के रूप में, हमेशा @Override का उपयोग जब आपको लगता है कि आप एक आधार समारोह अधिभावी कर रहे हैं - कि जिस तरह से संकलक आप एक त्रुटि दे देंगे अगर आप एक गलती

+0

यह काम करता है, लेकिन अब यह छवियों के साथ ग्रिडव्यू पॉप्युलेट नहीं करता है, मैं getView पर त्रुटि खोजने की कोशिश कर रहा हूं। – Marckaraujo

+0

@ मार्करौजो ने गेटव्यू के बारे में एक नोट जोड़ा - मुझे नहीं पता कि यह आपकी समस्या है या नहीं, लेकिन यह मदद कर सकता है - यूआरएल कहां से आ रहा है? – JRaymond

+0

अभी तक कुछ भी नहीं, मैं यह दिखाने के लिए कोड अपडेट करता हूं कि यूआरएल कहां से आता है। – Marckaraujo

1

एक Fragment में एक GridView का उपयोग कर की तुलना में किसी भी अलग नहीं होना चाहिए इसे Activity में उपयोग करना। आपके कोड के साथ एक चमकदार त्रुटि यह है कि आप onActivityCreated में एक लेआउट बढ़ा रहे हैं और फिर तुरंत इसे अनदेखा कर सकते हैं। इसके बजाय आपको onCreateView में अपना सभी दृश्य प्रारंभ करना चाहिए जो आपके उपयोग के लिए आसानी से LayoutInflater प्रदान करता है।

अपने वर्तमान व्यवहार के लिए, यह बहुत समझ में आता है कि यह क्यों काम कर रहा है। मेरा मानना ​​है कि ListFragment एक लेआउट को बढ़ाता है जिसमें ListView होता है यदि प्रोग्रामर एक प्रदान नहीं करता है (जो आप वर्तमान में नहीं हैं)। ImageAdapter आप सेटिंग कर रहे हैं तो एस ListView पर प्रदान करने के लिए उपयोग किया जाता है।

तो onActivityCreated से onCreateView में अपने सभी कोड को स्थानांतरित करें और इसे काम करना चाहिए। आपको onActivityCreated को ओवरराइड करने की आवश्यकता नहीं है जब तक आपको Activity के साथ कुछ विशेष करने की आवश्यकता न हो, जब आपका Fragment इससे जुड़ा हुआ हो।

और GridView प्री 4.0 - GridView का उपयोग करने के लिए एपीआई स्तर 1 के आसपास रहा है, इसलिए मैं शर्त लगाता हूं कि यह सभी एंड्रॉइड एपीआई स्तरों के लिए उपयोग करना ठीक है।

+0

खैर, मुझे वास्तव में पता नहीं है कि मुझे एक्टिविटी क्रिएटिव पर उपयोग करने की आवश्यकता क्यों है, यह सूचीदृश्य के साथ काम करता है, मैंने क्रिएटिव्यू को ऐप क्रैश पर जाने की भी कोशिश की। – Marckaraujo

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