プログラムでビューにIDを割り当てるにはどうすればよいですか?

感情

XMLファイルでは、のようなビューにIDを割り当ててからandroid:id="@+id/something"呼び出すfindViewById()ことができますが、プログラムでビューを作成する場合、IDを割り当てるにはどうすればよいですか?

setId()デフォルトの割り当てと同じではないと思います。setId()余分です。

誰かが私を訂正できますか?

CodeShane

Androidのid概要

Androididは、ビューを識別するために一般的に使用される整数です。これidは、XML(可能な場合)およびコード(プログラム)を介して割り当てることができます。これidViewInflater(を使用するなどして)によって生成されたXML定義参照を取得するのに最も役立ちますsetContentView

id経由で割り当てるXML

  • ビューandroid:id="@+id/somenameの属性を追加"します。
  • アプリケーションがビルドandroid:idされると、コードで使用するため一意の が割り当てられintます。
  • somename」(事実上定数)を使用して、コードでandroid:idint値を参照しますR.id.
  • これintはビルドごとに変わる可能性があるためpackage.name /からIDコピーしないでください。somename」を使用してください。gen/R.javaR.id.
  • (また、XMLでにid割り当てられたものPreferenceは、をPreference生成するときに使用されませんView。)

idコードを介して割り当てる(プログラムで)

  • intidを使用してsを手動で設定するsomeView.setId();
  • int正でなければなりませんが、それ以外それはあなたが望むものは何でもすることができarbitrary-される(これは恐ろしいであれば読み続けます。)
  • たとえば、アイテムを表す複数のビューを作成して番号を付ける場合は、それらのアイテム番号を使用できます。

一意id

  • XML-割り当てられたidは一意になります。
  • コードで割り当てられたid一意である必要ありませ
  • コードが割り当てられたidsは、(理論的には)XML-assignedと競合する可能性idがあります。
  • これらの競合idするものは、正しく照会されれば問題になりません(読み続けてください)

いつ(そしてなぜ)競合idするかは問題ではありません

  • findViewById(int)指定したビューからビュー階層を再帰的に深さ優先で繰り返し、最初Viewに見つかったものを一致するもので返しますid
  • 階層内のidXML定義の前に割り当てられたコード割り当てがない限りidfindViewById(R.id.somename)常にXML定義のビューを返しますid

動的ビューの作成および割り当てID

  • レイアウトXMLで、空ViewGroupidで定義します
  • などLinearLayoutandroid:id="@+id/placeholder"
  • コードを使用して、プレースホルダーViewGroupViewsを入力します。
  • 必要または必要な場合は、id各ビューに便利なを割り当てます。
  • placeholder.findViewById(convenientInt);を使用してこれらの子ビューをクエリします。

  • View.generateViewId()一意のIDを生成できるAPI17が導入されました。

ビューへの参照を周囲に保持することを選択した場合は、でそれらをインスタンス化し、getApplicationContext()で各参照をnullに設定してくださいonDestroyどうやら漏れたActivity(それは後に破壊されている上にぶら下がっは)無駄な..です:)

android:idコードで使用するためにXML予約する

View.generateViewId() 一意のIDを生成するAPI17が導入されました。(これを指摘してくれたtake-chances-make-changesに感謝します。)*

ViewGroupXMLで定義できない場合(または定義したくない場合)は、XMLを介してIDを予約し、一意のままにすることができます。

ここで、values / ids.xmlはカスタムを定義しますid

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="reservedNamedId" type="id"/>
</resources>

次に、ViewGroupまたはViewが作成されたら、カスタムIDを添付できます

myViewGroup.setId(R.id.reservedNamedId);

相反するid

難読化された例として明確にするためidに、舞台裏で競合が発生したときに何が起こるかを調べてみましょう

layout / mylayout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <LinearLayout
        android:id="@+id/placeholder"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
</LinearLayout>

競合をシミュレートするために、最新のビルドにR.id.placeholder@+id/placeholder)のint値が割り当てられているとし 12ます。

次に、MyActivity.javaプログラムで(コードを介して)いくつかの追加ビューを定義します。

int placeholderId = R.id.placeholder; // placeholderId==12
// returns *placeholder* which has id==12:
ViewGroup placeholder = (ViewGroup)this.findViewById(placeholderId);
for (int i=0; i<20; i++){
    TextView tv = new TextView(this.getApplicationContext());
    // One new TextView will also be assigned an id==12:
    tv.setId(i);
    placeholder.addView(tv);
}

したがってplaceholder、新しいものの1つはTextView両方ともid12です!ただし、プレースホルダーの子ビューを照会する場合、これは実際には問題ではありません。

// Will return a generated TextView:
 placeholder.findViewById(12);

// Whereas this will return the ViewGroup *placeholder*;
// as long as its R.id remains 12: 
Activity.this.findViewById(12);

*そんなに悪くない

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

スーパービューに一致するようにUIViews自動レイアウトエッジをプログラムで割り当てるにはどうすればよいですか?

分類Dev

Androidでは、膨張したビューにプログラムでカスタムパラメータを割り当てるにはどうすればよいですか?

分類Dev

タスクに割り当てられたユーザーをプログラムで変更するにはどうすればよいですか?

分類Dev

タスクに割り当てられたユーザーをプログラムで変更するにはどうすればよいですか?

分類Dev

プログラムの死のスローでより多くのスタックを割り当てるにはどうすればよいですか?

分類Dev

Androidでプログラムによってスクロールビューを設定するにはどうすればよいですか?

分類Dev

画面のどこにいても、プログラムでanyScreenのビューを取得するにはどうすればよいですか?

分類Dev

Android:プログラムでビューのグループを選択して変更するにはどうすればよいですか?

分類Dev

Xamarinにプログラムでビューを埋め込むにはどうすればよいですか?

分類Dev

KDEのタスクバーで開いているプログラムのビューを変更するにはどうすればよいですか?

分類Dev

ユーザーが割り当てた管理IDをAzureWeb Appステージングスロットにプログラムで割り当てるにはどうすればよいですか?

分類Dev

プログラムですべてのビューに同じセッション変数を設定するにはどうすればよいですか?

分類Dev

選択したアイテムをプログラムで変更してビューを変更するにはどうすればよいですか?

分類Dev

2つのテキストビューを垂直に配置してCardViewをプログラムで作成するにはどうすればよいですか?

分類Dev

既存のUIPageViewControllerのボタンを使用してプログラムでビューをスライドするにはどうすればよいですか

分類Dev

プログラムで電話のサイズに応じてビューを調整するにはどうすればよいですか?

分類Dev

プログラムでカスタムビューに追加されたビューにアクセスするにはどうすればよいですか?

分類Dev

プログラムで作成されたビューにUIAppearanceプロキシを適用するにはどうすればよいですか?

分類Dev

プログラムでAPI管理サービスを作成するにはどうすればよいですか?

分類Dev

プログラムでViewControllerを作成する場合、ビューをSKVIewタイプに設定するにはどうすればよいですか?

分類Dev

プログラムをモジュールに分割するにはどうすればよいですか?

分類Dev

組み込みアイコンの1つをプログラムでUIButtonに割り当てるにはどうすればよいですか?

分類Dev

Cプログラムでメモリを適切に割り当てるにはどうすればよいですか?

分類Dev

プログラムで追加された後のフラグメントのビューを取得するにはどうすればよいですか?

分類Dev

埋め込みビューのコントローラーをプログラムで選択するにはどうすればよいですか?

分類Dev

iOSでポリゴンフレームビューをプログラムでカスタマイズするにはどうすればよいですか?

分類Dev

2つのViewControllerをプログラムで作成されたテーブルビューにリンクするにはどうすればよいですか?

分類Dev

コレクションビューUITextFieldsにプログラムでタグを提供するにはどうすればよいですか?

分類Dev

プログラムで子を追加するビューのレイアウトをコピーするにはどうすればよいですか?

Related 関連記事

  1. 1

    スーパービューに一致するようにUIViews自動レイアウトエッジをプログラムで割り当てるにはどうすればよいですか?

  2. 2

    Androidでは、膨張したビューにプログラムでカスタムパラメータを割り当てるにはどうすればよいですか?

  3. 3

    タスクに割り当てられたユーザーをプログラムで変更するにはどうすればよいですか?

  4. 4

    タスクに割り当てられたユーザーをプログラムで変更するにはどうすればよいですか?

  5. 5

    プログラムの死のスローでより多くのスタックを割り当てるにはどうすればよいですか?

  6. 6

    Androidでプログラムによってスクロールビューを設定するにはどうすればよいですか?

  7. 7

    画面のどこにいても、プログラムでanyScreenのビューを取得するにはどうすればよいですか?

  8. 8

    Android:プログラムでビューのグループを選択して変更するにはどうすればよいですか?

  9. 9

    Xamarinにプログラムでビューを埋め込むにはどうすればよいですか?

  10. 10

    KDEのタスクバーで開いているプログラムのビューを変更するにはどうすればよいですか?

  11. 11

    ユーザーが割り当てた管理IDをAzureWeb Appステージングスロットにプログラムで割り当てるにはどうすればよいですか?

  12. 12

    プログラムですべてのビューに同じセッション変数を設定するにはどうすればよいですか?

  13. 13

    選択したアイテムをプログラムで変更してビューを変更するにはどうすればよいですか?

  14. 14

    2つのテキストビューを垂直に配置してCardViewをプログラムで作成するにはどうすればよいですか?

  15. 15

    既存のUIPageViewControllerのボタンを使用してプログラムでビューをスライドするにはどうすればよいですか

  16. 16

    プログラムで電話のサイズに応じてビューを調整するにはどうすればよいですか?

  17. 17

    プログラムでカスタムビューに追加されたビューにアクセスするにはどうすればよいですか?

  18. 18

    プログラムで作成されたビューにUIAppearanceプロキシを適用するにはどうすればよいですか?

  19. 19

    プログラムでAPI管理サービスを作成するにはどうすればよいですか?

  20. 20

    プログラムでViewControllerを作成する場合、ビューをSKVIewタイプに設定するにはどうすればよいですか?

  21. 21

    プログラムをモジュールに分割するにはどうすればよいですか?

  22. 22

    組み込みアイコンの1つをプログラムでUIButtonに割り当てるにはどうすればよいですか?

  23. 23

    Cプログラムでメモリを適切に割り当てるにはどうすればよいですか?

  24. 24

    プログラムで追加された後のフラグメントのビューを取得するにはどうすればよいですか?

  25. 25

    埋め込みビューのコントローラーをプログラムで選択するにはどうすればよいですか?

  26. 26

    iOSでポリゴンフレームビューをプログラムでカスタマイズするにはどうすればよいですか?

  27. 27

    2つのViewControllerをプログラムで作成されたテーブルビューにリンクするにはどうすればよいですか?

  28. 28

    コレクションビューUITextFieldsにプログラムでタグを提供するにはどうすればよいですか?

  29. 29

    プログラムで子を追加するビューのレイアウトをコピーするにはどうすればよいですか?

ホットタグ

アーカイブ