リソースIDからリソース名を取得する方法


158


私のレイアウトでは、このようなものを定義しました。

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

アクティビティの一部の関数がこのID(radioButtonのID)を返すと仮定します。次に、このIDからこのテキストradio1を取得します。要するに私は書かれたテキストradio1を取得したいですandroid:id="@+id/radio1"

誰かがそれをどのようにして可能にするのか教えてもらえますか?


その長い話..サーバーから受信したデータから、大量のeditTextにデータを入力する必要があります。だから、すべてのテキストボックスに手動でデータを設定する代わりに、これが私のために働くことができるメソッドを書いています...そのために私はこれが必要です。
Code_Life 2012

回答:


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
これに答えてくれてありがとう、私は1時間の大部分をこの問題のグーグル検索に費やしました-開発サイトは私にgetString()を指摘し続けました-これは流血の役に立たなかった。
Steve

8
違いは間にあるものを任意のアイデアgetResourceEntryName(int resid)getResourceName(int resid)
Joshua Pinter、2014年

10
@JoshPinter参照は言う: getResourceEntryName:指定されたリソース識別子のエントリ名を返しますgetResourceName:指定されたリソース識別子 の完全な名前を返します。この名前は、「package:type / entry」という形式の単一の文字列です。違いは、getResourceNameに追加されたpackage:typeにあるようです
Jose_GD

@Shubhayu-エスプレッソテストでこれをどのように行うのですか?getResources()関数が利用できないようです!
1ak31sha 2016年

Proguard(minifyEnabled true)を使用している場合は特に使用しないことをお勧めします。特にgetResources().getIdentifier(...
user25

9

あなたは持っているID(「長い」タイプ)を使用すると、アクセスラジオボタンにしたいそのIDからのID(名前)ですRadio1の。これを使う

getResources().getResourceEntryName(id);

上記を使用すると、ラジオボタンの名前、つまりradio1を取得できます。ここでパラメータidは、あなたが持っているもの(long type)です。それを試してみてください、それはあなたを100%助けます。


2
ありがとうございました。通常の「なぜ[noob]が必要なのか」の代わりに、誰かが実際に質問に答えてくれてうれしいです。要素の繰り返し処理中に要素の名前を取得することは、デバッグには無効です。つまり、実際には、ID 354814715のTextViewをどのように見つけますか?(私が間違っていない場合は、コンパイル間でさえ一定ではありません)-OPがなぜそれを必要とするのかはわかりませんが、フォントスケーリング関数が実際にすべてのサブ要素を反復処理していることを確認するために必要でした。
Steve


1

私が正しい場合、取得したいのは「radio1」という単語(ID自体から?)なので、そうであれば、最初にそのIDを取得する必要があります。

int intname= buttonname.getId();

その後、その結果を取得します

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

私が助けてくれることを願っています


-1

IDの文字列テキストを取得したいですか?

これを定義したので、これが何であるかを知っている必要があります。

レイアウトがあり、ビューに特定のIDがあるかどうかを確認したい場合は、レイアウト全体をトラバースし、各ビューのIDが探しているIDかどうかをgetId()で確認できます。

これが役に立てば幸いです(私があなたの質問を正しく理解した場合.. :))


いいえ、すべて間違っています。android:id = "@ + id / radio1"から テキストradio1を取得したい
Code_Life

テキストradio1はビューのIDです。これは、取得、分割などできる単純なテキストではありません。より適切に支援するために、このテキストが正確に何のために必要なのかを教えていただけますか?
Dimitris Makris

@DimitrisMakris:長い話ですが、サーバーから受信したデータから、大量のeditTextにデータを入力する必要があります。したがって、すべてのテキストボックスにデータを手動で設定する代わりに、これが機能する方法を書いています..そのためにこれが必要です
Code_Life

したがって、たとえば10のラジオボタンを入力する文字列などの10の応答がある場合、これらのラジオボタンを動的に作成して値を設定することで解決できると思います。別の方法としては、リストに関するラジオボタンを備えたListViewを使用する方法があります。もちろん、これがレイアウトに関するニーズに合っている場合です。
Dimitris Makris 2012

お休みありがとうございます。しかし、すべてが間違っています。10個のeditBoxがあり、この文字列が解析されてHashMapに変換された後、これらの10個の編集ボックスに入力する値をjson文字列として受け取ります。今度は、代わりに手動で各値(ハッシュマップのキーに対応)をeditTextテキストにマッピングします。私はこれが機能するメソッドを作成しています。
Code_Life 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.