Cara mendapatkan Resource Name dari Resource id

158


Dalam tata letak saya, saya telah mendefinisikan sesuatu seperti ini.

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

Asumsikan bahwa beberapa fungsi dalam aktivitas mengembalikan saya id ini (id radioButton). Sekarang saya ingin mendapatkan teks radio1 ini dari id ini. Singkatnya saya ingin mengambil teks radio1 yang ditulisandroid:id="@+id/radio1"

Adakah yang bisa memberitahu saya bagaimana mungkin?

Code_Life
sumber
Ceritanya panjang .. saya perlu mengisi data dalam jumlah besar dari editText dari beberapa data yang diterima dari server. Jadi alih-alih secara manual mengatur data ke semua kotak teks, saya menulis metode yang bisa bekerja untuk saya .. untuk itu saya perlu ini.
Code_Life

Jawaban:

363

Dalam Aktivitas Anda, coba ini:

  1. untuk mendapatkan string seperti radio1:

    getResources().getResourceEntryName(int resid);
  2. untuk mendapatkan string seperti com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

Di Kotlin Sekarang:

val name = v.context.resources.getResourceEntryName(v.id)
Shubhayu
sumber
4
Terima kasih telah menjawab ini, saya menghabiskan lebih dari satu jam mencari masalah ini di Google - situs pengembang terus menunjuk saya ke getString () - yang tidak berguna untuk ini.
Steve
8
Adakah yang tahu perbedaan antara getResourceEntryName(int resid)dan getResourceName(int resid)?
Joshua Pinter
10
@JoshPinter referensi mengatakan: getResourceEntryName: Kembalikan nama entri untuk pengenal sumber daya yang diberikan getResourceName: Kembalikan nama lengkap untuk pengenal sumber daya yang diberikan. Nama ini adalah string tunggal dari bentuk "paket: tipe / entri" Perbedaannya kemudian tampaknya dalam paket tambahan : ketik untuk getResourceName
Jose_GD
@ Shubhayu - bagaimana Anda bisa melakukan ini dalam tes espresso? fungsi getResources () sepertinya tidak tersedia!
1ak31sha
Saya tidak akan merekomendasikan menggunakannya jika Anda menggunakan Proguard ( minifyEnabled true), terutama untukgetResources().getIdentifier(...
user25
9

Anda memiliki id (tipe 'panjang') dari id yang ingin Anda akses id tombol radio (nama) yaitu radio1 . Anda menggunakan ini

getResources().getResourceEntryName(id);

dalam menggunakan di atas Anda bisa mendapatkan nama tombol radio yaitu radio1. di sini parameter id adalah yang Anda miliki (tipe panjang) . Coba ini akan membantu Anda 100%.

Anil Jadhav
sumber
2
Terima kasih. Senang seseorang benar-benar menjawab pertanyaan alih-alih yang biasa "mengapa Anda membutuhkan [noob] tanggapan". Memiliki nama elemen saat saya melakukan iterasi melalui mereka adalah INVALUABLE untuk debugging. Maksudku, sungguh, bagaimana saya akan menemukan TextView dengan id 354814715? (yang jika saya tidak salah bahkan tidak konstan di antara kompilasi) - tidak yakin mengapa OP membutuhkannya, tapi saya membutuhkannya untuk memverifikasi fungsi penskalaan font saya sebenarnya iterasi meskipun semua sub-elemen.
Steve
2

Kotlin:

val name = v.context.resources.getResourceEntryName(v.id)
Anand Makwana
sumber
2
Mungkin Anda dapat menambahkan informasi lebih lanjut tentang masalah apa yang diselesaikan dan bagaimana melakukannya :)
Philipp Meissner
@ PhilippMeissner semuanya jelas
Jemshit Iskenderov
Mari kita sepakat untuk tidak setuju.
Philipp Meissner
1

Jika saya benar, apa yang ingin Anda ambil adalah kata "radio1" (dari id itu sendiri?) Jadi jika itu masalahnya maka pertama-tama Anda harus mendapatkan idnya.

int intname= buttonname.getId();

kemudian dapatkan hasilnya

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

berharap saya bisa membantu

Fahad Maqsood Qazi
sumber
-1

Maksud Anda ingin mengambil teks string dari id?

Karena Anda telah mendefinisikannya, Anda harus tahu apa ini.

Jika Anda memiliki tata letak dan Anda ingin menemukan apakah suatu Tampilan memiliki id tertentu, Anda dapat melintasi seluruh tata letak dan memeriksa dengan getId (), jika id dari masing-masing Tampilan adalah id yang Anda cari ..

Semoga ini bisa membantu (jika saya mengerti benar pertanyaan Anda .. :))

Dimitris Makris
sumber
Tidak, kamu salah mengerti. Saya ingin mengambil teks radio1 dari android: id = "@ + id / radio1"
Code_Life
Teks radio1 ADALAH id dari Tampilan Anda. Ini bukan teks sederhana yang dapat Anda peroleh, pisah, dll. Untuk lebih membantu Anda, dapatkah Anda memberi tahu kami untuk apa Anda membutuhkan teks ini?
Dimitris Makris
@ DimitrisMakris: Ceritanya panjang .. saya perlu mengisi data dalam jumlah besar dari editText dari beberapa data yang diterima dari server. Jadi, alih-alih secara manual mengatur data ke semua kotak teks, saya menulis metode yang dapat bekerja untuk saya .. untuk itu saya membutuhkan ini
Code_Life
Jadi jika Anda memiliki respons 10 misalnya string yang ingin Anda isi 10 radiobuttons, saya pikir solusinya adalah secara dinamis membuat radiobuttons ini dan menetapkan nilainya. Pendekatan lain bisa menggunakan ListView dengan radiobuttons sebagai item daftar, jika tentu saja ini sesuai dengan kebutuhan Anda mengenai tata letak.
Dimitris Makris
Terima kasih atas istirahatnya. Tapi Anda salah paham, saya punya 10 kotak edit dan saya terima sebagai string json dengan nilai yang harus diisi dalam kotak edit 10 ini setelah string ini diuraikan menjadi dikonversi ke HashMap. Sekarang alih-alih secara manual memetakan setiap nilai (sesuai dengan kunci dari hashmap) ke editText teks .. saya menulis metode yang dapat bekerja untuk saya.
Code_Life