XML सरणी में R.drawable आईडी जमा करना


146

मैं R.drawable.*एक एक्सएमएल मान फ़ाइल का उपयोग करके एक सरणी के अंदर ड्रा करने योग्य संसाधनों की आईडी को स्टोर करना चाहूंगा , और फिर अपनी गतिविधि में सरणी को पुनः प्राप्त करूंगा।

कैसे प्राप्त करने के लिए कोई विचार?


1
क्या आप स्पष्ट कर सकते हैं कि "एक्सएमएल का उपयोग करके एक सरणी के अंदर" से आपका क्या मतलब है?
यूजीन एस

एक मान फ़ाइल। उदाहरण के लिए,
स्ट्रिंग्स.एक्सएमएल

1
मुझे समझ नहीं आता कि आप ऐसा क्यों करना चाहेंगे। क्या आप इस बारे में कुछ और पृष्ठभूमि प्रदान कर सकते हैं कि आप इसे इस तरह क्यों करना चाहते हैं?
मेटर-

लगता है कि आप किसी तरह से आवश्यकता से अधिक जटिल करने की कोशिश कर रहे हैं।
ऑक्टेवियन ए। डामियन

3
मैं जो करने की कोशिश कर रहा हूं वह आईडी को उन छवियों के लिए संग्रहीत करना है जिन्हें एक सूची में प्रदर्शित किया जाएगा।
गैमरैप्टोर

जवाबों:


362

आप अपने फ़ोल्डर में फ़ाइल में एक टाइप की गई सरणी का उपयोग arrays.xmlकरते हैं /res/valuesजो इस तरह दिखाई देती है:

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

    <integer-array name="random_imgs">
        <item>@drawable/car_01</item>
        <item>@drawable/balloon_random_02</item>
        <item>@drawable/dog_03</item>
    </integer-array>

</resources>

फिर अपनी गतिविधि में, उन्हें इस तरह एक्सेस करें:

TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);

// get resource ID by index
imgs.getResourceId(i, -1)

// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, -1));

// recycle the array
imgs.recycle();

1
आपका बहुत बहुत धन्यवाद। मैंने कोड को अनुकूलित किया, और अब यह काम करता है। आपका बहुत बहुत धन्यवाद।
गैमरैप्टोर

6
अरे आप यह बता सकते हैं कि imgs.getResourceId (i, -1) में -1 क्या है?
निषाद

6
सिफारिश: उपयोगकर्ता "imgs" के बाद निम्न पंक्ति जोड़ें: imgs.recycle ();
बेनोफी

9
आपको डिफ़ॉल्ट आईडी के लिए -1 के बजाय 0 का उपयोग करना चाहिए। -1 एक वैध संसाधन आईडी है, जबकि 0 शून्य संसाधन है।
एलेक्स

6
बहुत खुबस! टाइप किए गए सरणियाँ मीठी हैं।
asgs

31

में valueफ़ोल्डर बनाने के xmlफ़ाइल नाम यह arrays.xml इस तरह से यह करने के लिए डेटा जोड़ने

<integer-array name="your_array_name">
    <item>@drawable/1</item>
    <item>@drawable/2</item>
    <item>@drawable/3</item>
    <item>@drawable/4</item>
</integer-array>

फिर इसे इस तरह से अपने कोड में प्राप्त करें

private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);

फिर निम्न कोड के उपयोग के रूप में उदाहरण Drawableके img TypedArrayलिए इनमें से एक का ImageView backgroundउपयोग करने के लिए

ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));

सूचकांक कहां indexहै एक मूल्य है जो आप देते हैं अगर इस पर कोई आइटम नहीं हैDrawabledefaultValueindex

TypedArrayइस लिंक पर जाने के बारे में अधिक जानकारी के लिए http://developer.android.com/reference/android/content/res/Typedr.gov.in


15

आप इसका उपयोग अन्य संसाधनों की एक सरणी बनाने के लिए कर सकते हैं, जैसे कि ड्रॉबल्स। ध्यान दें कि सरणी को सजातीय होने की आवश्यकता नहीं है, इसलिए आप मिश्रित संसाधन प्रकारों की एक सरणी बना सकते हैं, लेकिन आपको पता होना चाहिए कि सरणी में डेटा प्रकार क्या और कहाँ हैं।

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

और इस तरह से अपनी गतिविधि में संसाधन प्राप्त करें

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);

का आनंद लें!!!!!


1

कोटलिन रास्ता यह हो सकता है:

fun Int.resDrawableArray(context: Context, index: Int, block: (drawableResId: Int) -> Unit) {
  val array = context.resources.obtainTypedArray(this)
  block(array.getResourceId(index, -1))
  array.recycle()
}

R.array.random_imgs.resDrawableArray(context, 0) {
  mImgView1.setImageResource(it)
}

1

कोटलिन में, आप निम्न कार्य कर सकते हैं: -

 <integer-array name="drawer_icons">
    <item>@drawable/drawer_home</item>
</integer-array>

आपको संसाधन के रूप में छवि की सरणी मिल जाएगी TypedArray

 val imageArray = resources.obtainTypedArray(R.array.drawer_icons)

सूचकांक द्वारा संसाधन आईडी प्राप्त करें

imageArray.getResourceId(imageArray.getIndex(0),-1)

या आप id पर imageView का संसाधन सेट कर सकते हैं

imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))

और अंतिम में सरणी को रीसायकल करें

imageArray.recycle()

-2

जहाँ तक मुझे पता है आप R.drawable में सरणियाँ संग्रहीत नहीं कर सकते।

आप क्या कर सकते हैं config.xml या strings.xml में एक सरणी बना सकते हैं जो एक उपनाम संसाधन का उपयोग करके एक आकर्षित करने योग्य संसाधन के लिए एक मार्ग का निर्माण करता है

देखें कि क्या यह काम करता है, और कृपया मुझे बताएं कि क्या आपको किसी अतिरिक्त सहायता की आवश्यकता है।


4
इस प्रश्न की गलतफहमी के लिए नीचे मतदान किया गया - इस पर सीमाओं की कोई क़ानून नहीं है मुझे डर है ...
चार्ली स्कॉट-स्किनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.