วิธีรับชื่อทรัพยากรจากรหัสทรัพยากร


158


ในเลย์เอาต์ของฉันฉันได้กำหนดบางอย่างเช่นนี้

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

สมมติว่าฟังก์ชั่นบางอย่างในกิจกรรมส่งคืนรหัสนี้ให้ฉัน ตอนนี้ฉันต้องการได้รับข้อความนี้radio1จากรหัสนี้ ในระยะสั้นฉันต้องการที่จะดึงข้อความวิทยุ 1เขียนandroid:id="@+id/radio1"

ใครสามารถบอกฉันว่ามันเป็นไปได้?


มันเป็นเรื่องยาว .. ฉันต้องการที่จะเติมข้อมูลลงใน editText จำนวนมากจากข้อมูลบางอย่างที่ได้รับจากเซิร์ฟเวอร์ ดังนั้นแทนที่จะตั้งค่าข้อมูลไปยังกล่องข้อความทั้งหมดด้วยตนเองฉันกำลังเขียนวิธีที่สามารถใช้งานได้สำหรับฉัน .. สำหรับสิ่งที่ฉันต้องการ
Code_Life

คำตอบ:


363

ในกิจกรรมของคุณลองเหล่านี้:

  1. เพื่อรับสตริงเช่นradio1:

    getResources().getResourceEntryName(int resid);
  2. เพื่อรับสตริงเช่นcom.sample.app:id/radio1:

    getResources().getResourceName(int resid);

ใน Kotlin ตอนนี้:

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

4
ขอบคุณที่ตอบคำถามนี้ฉันใช้เวลาส่วนหนึ่งในการทำดีกว่าหนึ่งชั่วโมงเพื่อแก้ปัญหานี้ - ไซต์ dev ยังคงชี้ให้ฉันไปที่ getString () - ซึ่งเป็นเลือดที่ไร้ประโยชน์สำหรับเรื่องนี้
Steve

8
ความคิดใดที่แตกต่างกันระหว่างgetResourceEntryName(int resid)และgetResourceName(int resid)?
Joshua Pinter

10
@JoshPinter การอ้างอิงพูดว่า: getResourceEntryName:ส่งคืนชื่อรายการสำหรับตัวระบุทรัพยากรที่กำหนด getResourceName:ส่งคืนชื่อเต็มสำหรับตัวระบุทรัพยากรที่กำหนด ชื่อนี้เป็นสตริงเดียวของฟอร์ม "package: type / entry" ความแตกต่างนั้นดูเหมือนจะอยู่ในแพ็คเกจเพิ่มเติม: พิมพ์สำหรับgetResourceName
Jose_GD

@Shubhayu - คุณจะทำแบบทดสอบเอสเพรสโซ่ได้อย่างไร? ดูเหมือนว่าฟังก์ชั่น getResources () จะไม่สามารถใช้ได้!
1ak31sha

ฉันจะไม่แนะนำให้ใช้ถ้าคุณใช้ Proguard ( minifyEnabled true) โดยเฉพาะสำหรับgetResources().getIdentifier(...
user25

9

คุณมีID (ชนิด 'ยาว')จาก ID ที่คุณต้องการปุ่มเข้าถึงID (ชื่อ)ที่เป็นRadio1 คุณใช้สิ่งนี้

getResources().getResourceEntryName(id);

ในการใช้งานด้านบนคุณจะได้รับชื่อปุ่มตัวเลือกเช่น radio1 นี่ID พารามิเตอร์ที่คุณมี (ชนิดยาว) ลองใช้มันจะช่วยให้คุณ 100%


2
ขอบคุณ. ดีใจที่มีคนตอบคำถามแทน "ทำไมคุณถึงต้องการคำตอบ [noob]" มีชื่อขององค์ประกอบในขณะที่ฉัน iterating ผ่านพวกเขาไม่เหมาะสมสำหรับการแก้จุดบกพร่อง ฉันหมายถึงจริงๆฉันจะหา TextView ด้วย id 354814715 ได้อย่างไร (ซึ่งถ้าฉันไม่เข้าใจผิดไม่ได้เป็นค่าคงที่ระหว่างการคอมไพล์) - ไม่แน่ใจว่าทำไม OP ต้องการมัน แต่ฉันต้องการมันเพื่อตรวจสอบว่าฟังก์ชั่นการปรับขนาดตัวอักษรของฉันนั้นจริงๆแล้วซ้ำแล้วซ้ำอีก
Steve

2

Kotlin:

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

2
บางทีคุณอาจจะสามารถเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่เป็นปัญหาแก้นี้และวิธีการที่จะไม่ให้ :)
ฟิลิปป์ Meissner

@PhilippMeissner มันชัดเจนทั้งหมด
Jemshit Iskenderov

เราตกลงที่จะไม่เห็นด้วย
Philipp Meissner

1

ถ้าฉันพูดถูกสิ่งที่คุณต้องการดึงกลับมาคือคำว่า "radio1" (จากรหัสตัวเอง?) ดังนั้นถ้าเป็นอย่างนั้นก่อนอื่นคุณต้องได้รับรหัส

int intname= buttonname.getId();

จากนั้นรับผลของมัน

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

หวังว่าฉันช่วย


-1

คุณหมายถึงคุณต้องการที่จะใช้ข้อความสตริงของ ID?

เมื่อคุณกำหนดไว้คุณควรรู้ว่านี่คืออะไร

หากคุณมีเลย์เอาต์และคุณต้องการค้นหาว่าวิวมี id เฉพาะหรือไม่คุณสามารถเข้าไปดูเลย์เอาต์ทั้งหมดและตรวจสอบกับ getId () หากรหัสของแต่ละมุมมองเป็นรหัสที่คุณกำลังมองหา ..

หวังว่านี่จะช่วยได้ (ถ้าฉันเข้าใจคำถามของคุณถูกต้อง .. :))


ไม่คุณเข้าใจผิดทั้งหมด ฉันต้องการดึงข้อความradio1จาก android: id = "@ + id / radio1"
Code_Life

ข้อความ radio1 เป็นรหัสของมุมมองของคุณ ไม่ใช่ข้อความง่ายๆที่คุณจะได้รับแยกและอื่น ๆ เพื่อช่วยให้คุณดีขึ้นคุณช่วยบอกเราได้ไหมว่าคุณต้องการอะไรสำหรับข้อความนี้?
Dimitris Makris

@DimitrisMakris: มันเป็นเรื่องยาว .. ฉันต้องการที่จะเติมข้อมูลลงใน editText จำนวนมากจากข้อมูลบางส่วนที่ได้รับจากเซิร์ฟเวอร์ ดังนั้นแทนที่จะตั้งค่าข้อมูลไปยังกล่องข้อความทั้งหมดด้วยตนเองฉันกำลังเขียนวิธีที่สามารถใช้งานได้สำหรับฉัน .. สำหรับสิ่งที่ฉันต้องการสิ่งนี้
Code_Life

ดังนั้นหากคุณมีการตอบสนอง 10 สำหรับสตริงตัวอย่างที่คุณต้องการเติม 10 radiobuttons ฉันคิดว่าวิธีแก้ปัญหาอาจจะสร้าง radiobuttons เหล่านี้แบบไดนามิกและตั้งค่าของพวกเขา อีกวิธีหนึ่งคือการใช้ ListView ด้วย radiobuttons เป็นไอเท็มรายการหากหลักสูตรนี้ตรงกับความต้องการของคุณเกี่ยวกับเลย์เอาต์
Dimitris Makris

ขอบคุณสำหรับความเคารพของคุณ แต่คุณเข้าใจผิดฉันมี 10 editBox และฉันได้รับเป็นสตริง json ที่มีค่าที่จะเติมใน 10 editbox หลังจากสตริงนี้เป็น parserd มันถูกแปลงเป็น HashMap ตอนนี้แทนที่จะทำการแมปแต่ละค่า (สอดคล้องกับคีย์ของ hashmap) แทนการแก้ไขข้อความ text .. ฉันกำลังเขียนวิธีที่สามารถใช้งานได้สำหรับฉัน
Code_Life
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.