संसाधन आईडी से संसाधन नाम कैसे प्राप्त करें


158


अपने लेआउट में मैंने कुछ इस तरह परिभाषित किया है।

<RadioButton
    android:id="@+id/radio1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dnt want this text" />

मान लें कि गतिविधि में कुछ फ़ंक्शन मुझे यह आईडी (रेडियोबटन की आईडी) लौटाता है। अब मैं इस आईडी से यह पाठ रेडियो 1 प्राप्त करना चाहता हूं । संक्षेप में मैं लिखित पाठ रेडियो 1 को पुनः प्राप्त करना चाहता हूंandroid:id="@+id/radio1"

क्या कोई मुझे बता सकता है कि यह कैसे संभव है?


इसकी एक लंबी कहानी है .. मुझे सर्वर से प्राप्त कुछ डेटा से बड़ी संख्या में editText के डेटा को आबाद करने की आवश्यकता है। इसलिए सभी टेक्स्टबॉक्स में मैन्युअल रूप से डेटा सेट करने के बजाय, मैं एक ऐसी विधि लिख रहा हूं जो मेरे लिए यह काम कर सकती है .. इसके लिए मुझे इसकी आवश्यकता है।
कोड_लिफ़

जवाबों:


363

अपनी गतिविधि में, ये आज़माएँ:

  1. जैसे स्ट्रिंग प्राप्त करने के लिए radio1:

    getResources().getResourceEntryName(int resid);
  2. जैसे स्ट्रिंग प्राप्त करने के लिए com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

कोटलिन में अब:

val name = v.context.resources.getResourceEntryName(v.id)

4
इसका उत्तर देने के लिए धन्यवाद, मैंने इस समस्या को हल करने में एक घंटे का बेहतर हिस्सा बिताया - देव स्थल ने मुझे getString () के लिए इशारा किया - जो इसके लिए बेकार था।
स्टीव

8
किसी भी विचार के बीच अंतर क्या है getResourceEntryName(int resid)और getResourceName(int resid)?
जोशुआ पिंटर

10
संदर्भ कहते हैं @JoshPinter: getResourceEntryName: वापसी दिए गए संसाधन पहचानकर्ता के लिए प्रवेश नाम getResourceName: वापसी दिए गए संसाधन पहचानकर्ता का पूरा नाम। यह नाम फॉर्म "पैकेज: टाइप / एंट्री" का एक एकल स्ट्रींग है। अंतर तब जोड़े गए पैकेज में लगता है : getResourceName के
Jos_GD

@ शुभू - एस्प्रेसो टेस्ट में आप ऐसा कैसे कर सकते हैं? getResources () फ़ंक्शन उपलब्ध नहीं लगता है!
अक्षा 31

यदि आप minifyEnabled trueविशेष रूप सेgetResources().getIdentifier(...
user25

9

आपके पास उस आईडी से आईडी ('लंबी' प्रकार) है जिसे आप रेडियो बटन आईडी (नाम) तक पहुंचाना चाहते हैं जो कि रेडियो 1 है । आप इस का उपयोग करें

getResources().getResourceEntryName(id);

ऊपर का उपयोग करके आप रेडियो बटन का नाम प्राप्त कर सकते हैं अर्थात रेडियो 1। यहाँ पैरामीटर आईडी है जो आपके पास है (लंबा प्रकार) । इसे आज़माएं इससे आपको 100% मदद मिलेगी।


2
धन्यवाद। खुशी है कि किसी ने वास्तव में सामान्य प्रश्न के बजाय "आपको क्यों [noob]" प्रतिक्रियाओं की आवश्यकता है। जब मैं उनके माध्यम से पुनरावृत्ति कर रहा हूं तो तत्व का नाम होना, डिबगिंग के लिए अयोग्य है। मेरा मतलब है, वास्तव में, मैं कैसे आईडी 354814715 आईडी के साथ TextView खोजने जा रहा हूं? (जो कि अगर मैं गलत नहीं हूँ तो संकलन के बीच भी स्थिर नहीं है) - सुनिश्चित नहीं है कि ओपी को इसकी आवश्यकता क्यों थी, लेकिन मुझे अपने फ़ॉन्ट-स्केलिंग फ़ंक्शन को सत्यापित करने के लिए इसकी आवश्यकता थी, हालांकि सभी उप-तत्वों के कारण यह चल रहा था।
स्टीव

2

Kotlin:

val name = v.context.resources.getResourceEntryName(v.id)

2
शायद आप इस समस्या के बारे में अधिक जानकारी जोड़ सकते हैं कि यह कैसे हल करती है और ऐसा कैसे करती है :)
फिलिप मीस्नर

@PhilippMeissner यह सब स्पष्ट है
Jemshit Iskenderov

और कोई बहस नहीं चाहिए।
फिलिप मीसनर

1

अगर मैं सही हूं, तो आप जो चाहते थे, वह है "रेडियो 1" शब्द (आईडी से ही?) इसलिए यदि ऐसा है तो सबसे पहले आपको इसकी आईडी लेनी होगी।

int intname= buttonname.getId();

फिर इसका परिणाम प्राप्त करें

String stringname= getResources().getResourceEntryName(intname);

उम्मीद है कि मैंने मदद की


-1

आपका मतलब है कि आप आईडी का स्ट्रिंग टेक्स्ट लेना चाहते हैं?

चूंकि आपने इसे परिभाषित किया है, आपको पता होना चाहिए कि यह क्या है।

यदि आपके पास एक लेआउट है और आप यह देखना चाहते हैं कि क्या कोई दृश्य विशिष्ट आईडी है, तो आप पूरे लेआउट को पार कर सकते हैं और getId () के साथ जांच कर सकते हैं, यदि प्रत्येक दृश्य की आईडी वह आईडी है जिसे आप खोज रहे हैं ..

आशा है कि यह मदद करता है (अगर मैंने आपके प्रश्न को सही समझा है .. :))


नहीं, यू यह सब गलत है। मैं एंड्रॉइड से टेक्स्ट रेडियो 1 को पुनः प्राप्त करना चाहता हूं : आईडी = "@ + आईडी / रेडियो 1"
कोड_लिफ़

टेक्स्ट रेडियो 1 आपके दृश्य की आईडी है। यह एक सरल पाठ नहीं है जिसे आप प्राप्त कर सकते हैं, विभाजित कर सकते हैं, आदि .. आपकी बेहतर मदद करने के लिए, क्या आप हमें बता सकते हैं कि आपको इस पाठ की वास्तव में क्या आवश्यकता है?
दिमित्री मकरिस

@DimitrisMakris: इसकी एक लंबी कहानी है। मुझे सर्वर से प्राप्त कुछ डेटा से बड़ी संख्या में editText में डेटा को पॉप्युलेट करने की आवश्यकता है। इसलिए सभी टेक्स्टबॉक्स में मैन्युअल रूप से डेटा सेट करने के बजाय, मैं एक विधि लिख रहा हूं जो मेरे लिए यह काम कर सकती है .. इसके लिए मुझे इसकी आवश्यकता है
Code_Life

इसलिए यदि आपके पास उदाहरण स्ट्रिंग्स के लिए 10 की प्रतिक्रिया है, जिसके साथ आप 10 रेडियोबूटों को आबाद करना चाहते हैं, तो मुझे लगता है कि इन रेडियोबुटनों को गतिशील रूप से बनाने और उनका मूल्य निर्धारित करने के लिए एक समाधान हो सकता है। एक अन्य दृष्टिकोण सूची आइटम के रूप में रेडियोबुटन के साथ एक लिस्ट व्यू का उपयोग करने के लिए हो सकता है, अगर टोर्च लेआउट के संबंध में आपकी आवश्यकताओं को फिट करता है।
दिमित्री मकरिस

आपके रिस्पॉन्स के लिए धन्यवाद। लेकिन u यह सब गलत हो गया है मेरे पास 10 editBox है और मुझे इन 10 editbox में भरे जाने वाले मान के साथ json स्ट्रिंग के रूप में प्राप्त होता है इस स्ट्रिंग के पार्सर होने के बाद इसे HashMap में बदल दिया जाता है। अब इसके बजाय मैन्युअल रूप से प्रत्येक मूल्य (हैशमैप की कुंजी) को एडिट टेक्स्ट को मैप करना .. मैं एक विधि लिख रहा हूं जो मेरे लिए यह काम कर सकती है।
Code_Life
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.