मैं एक एंड्रॉइड ऐप विकसित करने का प्रयास करता हूं जो उपयोगकर्ता को फ़्लिकर से डेटा लाने की अनुमति देता है और इसे 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;
}
आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मुझे लगता है कि यह बात है। ठीक है देखते हैं ... अगर मैं सही ढंग से समझता हूं, तो MyAdapter मेरा ImageAdapter होगा, है ना? लेकिन फिर, mPhotos संदर्भ होगा? मैं क्षमा चाहता हूं, मैंने कई एडाप्टर टट्स के माध्यम से पढ़ा है, लेकिन मुझे अभी भी यह नहीं मिला है। मुझे ImageAdapter/MyAdapter को सही तरीके से कैसे सेट अप करना होगा? –
हां, MyAdapter == छवि एडाप्टर।नहीं, mPhotos सिर्फ एक सूची है जो फ़ोटो रखेगी। आपके मामले के लिए, यदि आप कन्स्ट्रक्टर में ArrayAdapter के साथ ImageAdapter का विस्तार करते हैं तो यह बेहतर होगा, आप इसे आइटमों की एक सूची पास कर सकते हैं। –
Macarse
इसके लिए धन्यवाद। मैं गैलरी के साथ एक ही काम कर रहा हूँ। मैंने सोचा कि विधि एडाप्टर में पाई जाएगी क्योंकि गैलरी में कुछ भी नहीं है। तो मुझे कभी विफल नहीं करता है। :) – frostymarvelous