2011-01-16 10 views
6

मैं एक एंड्रॉइड ऐप विकसित करने का प्रयास करता हूं जो उपयोगकर्ता को फ़्लिकर से डेटा लाने की अनुमति देता है और इसे GridView (कुछ अच्छे 3 डी-एनीमेशन के साथ) में दिखाता है। कुछ रोमांचों के बाद मुझे यह लगभग चल रहा है, लेकिन अब मैं अटक गया हूँ।ImageViews के साथ गतिशील रूप से/प्रोग्रामेटिक रूप से छवि दृश्यों के साथ एक ग्रिड व्यू पॉप्युलेट करना

मैं एक यूआई धागा "LoadPhotosTask" जो सिर्फ खुला स्रोत आवेदन photostream की तरह, फ्लिकर से चित्र हो जाता है:


यहाँ समस्या है। उस सबक्लास के onProgressUpdate(LoadedPhoto... value) विधि में मैं addPhoto() पर कॉल करता हूं। अब तक सब कुछ ठीक है - मुझे कुछ अच्छी जानकारी के साथ कुछ अच्छा बिटमैप और फ़्लिकर.फोटो डेटा मिला है।

 @Override 
    public void onProgressUpdate(LoadedPhoto... value) { 

     addPhoto(value); 
    } 

दूसरी ओर मुझे GridView मिला है। अब मैं इसे फोटो से भरना चाहता हूं। इसे ImageAdapter नामक एक एडाप्टर मिला है (जो BaseAdapter बढ़ाता है, यह tutorial देखें)। अगर मैं ImageAdapter कक्षा के अंदर एक सरणी का उपयोग करता हूं तो मैं कुछ नमूना छवियों के साथ GridView को पॉप्युलेट कर सकता हूं। लेकिन अगर मैं रनटाइम पर इसे पॉप्युलेट करना चाहता हूं, तो मुझे नहीं पता कि क्या करना है।

मुझे ImageAdapter में getView विधि कैसे सेट अप करें? मैं addPhoto में अपने मानों के साथ ImageAdapter कक्षा के अंदर सरणी को भरने की कोशिश कर रहा था, लेकिन यह कुछ भी प्रदर्शित नहीं करता है।

तो सब मैं तस्वीरें की राशि के साथ सरणी की स्थापना की गई थी के पहले मैं (कोड ImageAdapter वर्ग के अंदर है) ऐसे ही ग्रिड में प्रदर्शित करने के लिए चाहता था:

// class variable 
private ImageView[] mThumbIds; 

    [...] 

    public void setupArray(int count) { 
      this.mThumbIds = new ImageView[count]; 
     } 

तब मैं इस विधि के साथ फोन मेरी photolist की लंबाई:

private void addPhoto(LoadedPhoto... value) { 

    ImageView image = (ImageView) mInflater.inflate(
    R.layout.grid_item_photo, null); 
    image.setImageBitmap(value[0].mBitmap); 
    image.setTag(value[0].mPhoto); 

    imagead.setmThumbIds(image, value[0].mPosition); 
    imagead.getView(value[0].mPosition, null, mpicturesGrid); 

} 
:

final Flickr.PhotoList list = params[0]; 
     final int count = list.getCount(); 
     int helper = 0; 
    imagead.setupArray(count); 

बाद में मैं addPhoto विधि के अंदर मैन्युअल getView विधि कॉल

ImageAdapter अंदर getView तरीका है कि:

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

    if (convertView == null) { // if it's not recycled, initialize some 
     // attributes 

     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(EDGE_LENGTH, 
     EDGE_LENGTH)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(0, 0, 0, 0); 
     imageView.setVisibility(View.VISIBLE); 

    } else { 

     imageView = (ImageView) convertView; 
    } 
    imageView.setImageDrawable(mThumbIds[position].getDrawable()); 
    imageView.setTag(mThumbIds[position].getTag()); 

    return imageView; 

} 

उत्तर

9

आप एक महत्वपूर्ण हिस्सा याद कर रहे हैं।

जब आप एक Adapter का उपयोग आप एक विधि notifyDataSetChanged() कहा जाता है। तर्क तुम वहाँ याद कर रहे हैं है निम्नलिखित:

जब सूची है कि अनुकूलक का उपयोग करेगा के लिए एक संदर्भ के साथ GridView ठहरने के लिए Adapter बनाने। कुछ की तरह:

private ArrayList<Photo> mPhotos; 
private BaseAdapter mAdapter; 
private GridView mGridView; 

onCreate: 

/* other things here */ 

mAdapter = new MyAdapter(mPhotos); 
mGridView.setAdapter(mAdapter); 

क्या आप addPhoto करना चाहिए है निम्नलिखित:

mPhotos.add(photo); 
mAdapter.notifyDataSetChanged(); 

यह है कि।

+0

आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मुझे लगता है कि यह बात है। ठीक है देखते हैं ... अगर मैं सही ढंग से समझता हूं, तो MyAdapter मेरा ImageAdapter होगा, है ना? लेकिन फिर, mPhotos संदर्भ होगा? मैं क्षमा चाहता हूं, मैंने कई एडाप्टर टट्स के माध्यम से पढ़ा है, लेकिन मुझे अभी भी यह नहीं मिला है। मुझे ImageAdapter/MyAdapter को सही तरीके से कैसे सेट अप करना होगा? –

+0

हां, MyAdapter == छवि एडाप्टर।नहीं, mPhotos सिर्फ एक सूची है जो फ़ोटो रखेगी। आपके मामले के लिए, यदि आप कन्स्ट्रक्टर में ArrayAdapter के साथ ImageAdapter का विस्तार करते हैं तो यह बेहतर होगा, आप इसे आइटमों की एक सूची पास कर सकते हैं। – Macarse

+0

इसके लिए धन्यवाद। मैं गैलरी के साथ एक ही काम कर रहा हूँ। मैंने सोचा कि विधि एडाप्टर में पाई जाएगी क्योंकि गैलरी में कुछ भी नहीं है। तो मुझे कभी विफल नहीं करता है। :) – frostymarvelous

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