codememo

보기에 ID를 프로그래밍 방식으로 할당하려면 어떻게 해야 합니까?

tipmemo 2023. 8. 1. 20:32
반응형

보기에 ID를 프로그래밍 방식으로 할당하려면 어떻게 해야 합니까?

에서 XML ""와 같은 할 수 .android:id="@+id/something"그리고 나서 전화합니다.findViewById()그러나 프로그래밍 방식으로 보기를 만들 때 ID를 할당하려면 어떻게 해야 합니까?

생각합니다setId()기본 할당과 다릅니다.setId()추가입니다.

누가 나를 고쳐줄 수 있습니까?

안드로이드id

안이id보기를 하는 데 이며, 이 " 일적으뷰식데정사다수니입는용되는별는하를로반"입니다.idXML(가능한 경우) 및 코드(프로그래밍 방식)를 통해 할당할 수 있습니다.id XML에 대한 데 합니다.View해 성 생된의s에 의해 된 s.Inflater: (으)로 )setContentView.)

할당id경유로XML

  • 의 합니다.android:id="@+id/ 이름"자네가 보기에는
  • 애플리케이션이 구축되면android:id고유 항목이 할당됩니다. int암호에 사용하기 위한.
  • 하십시오.android:idint"" 사용여코드값를하"를 사용한R.id. name" ( some name (어떤 이름)
  • 빌드에서 빌드로 변경될 수 있으므로 ID를 복사하지 마십시오.gen/package.name/R.java그냥 "를 사용하세요.R.id.어떤 이름."
  • , (또한,한,idPreferenceXML은 다음과 같은 경우에 사용되지 않습니다.Preference를 생성합니다.View.)

할당id코드를 통해(프로그래밍 방식으로)

  • 으로 설정하기id 용하여를 합니다.someView.setId( 트인에);
  • int긍정적이어야 하지만, 그렇지 않으면 임의적입니다. 원하는 대로 될 수 있습니다(무섭다면 계속 읽으십시오).
  • 예를 들어 항목을 나타내는 여러 뷰를 만들고 번호를 지정하는 경우 해당 항목 번호를 사용할 수 있습니다.

의고성의 ids

  • XML- 재 - 는밌assigned는ids는 고유합니다.
  • 할당 코드됨ids는 고유할 필요가 없습니다.
  • 할당 코드됨id 와 합니다.XML- 재 - 는밌assigned는ids의
  • 충돌하는 러한충돌.ids는 정확하게 쿼리해도 문제가 되지 않습니다(계속 읽음).

충돌하는 시기(및 이유)id

  • findViewById(int)지정한 뷰의 계층을 통해 깊이 우선을 재귀적으로 반복하고 첫 번째 깊이 우선을 반환합니다.View하는 일하는항찾으로 찾습니다.id.
  • 지정이 한id XML 에 id 층구서에조계,,findViewById(R.id.somename)는 항상 하므로 "XML 파일"을 반환합니다.id'd.

으로 및 IDs

  • 에서 빈 합니다.ViewGroup와 함께id.
  • 를 들면 를들어.LinearLayout와 함께android:id="@+id/placeholder".
  • 표시자를 .ViewGroup와 함께Views의
  • 임의의 파일을 합니다.id각 보기에 편리한 s.
  • 자리 표시자를 사용하여 하위 보기를 쿼리합니다.findViewById(convinancyInt);

  • 17 API 17 »View.generateViewId()고유 ID를 생성할 수 있습니다.

뷰에 대한 참조를 유지하도록 선택한 경우 다음을 사용하여 인스턴스화해야 합니다.getApplicationContext()각 참조를 null로 설정해야 합니다.onDestroy보아하니 새는 것 같습니다.Activity(그것이 파괴된 후에 그것에 추가하는 것은) 낭비입니다. :)

XML »android:id암호에 사용하기 위한.

API 17 도 View.generateViewId() 고유한 ID를 생성합니다. (이것을 지적해 주신 Take-chance-make-changes 덕분입니다.)*

만약 당신이ViewGroupXML을 통해 정의할 수 없습니다(또는 원하지 않을 경우). XML을 통해 ID를 예약하여 고유하게 유지할 수 있습니다.

여기서 values/ids.xml은 사용자 지정을 정의합니다.id:

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

그런 다음 보기 그룹 또는 보기가 생성되면 사용자 지정 ID를 첨부할 수 있습니다.

myViewGroup.setId(R.id.reservedNamedId);

»id를 들어보기

한 설명을 , 난화된예명위해을성과, ▁an▁▁is,▁▁happens▁for▁what▁lets▁examine▁clarityating▁by다니검▁example합토것▁of▁way▁obfusc난을독다음이 있을 때 어떤 일이 일어나는지 살펴보도록 하겠습니다.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그리고 우리의 새로운 것 중 하나.TextView둘 다 가지고 있습니다.id하지만 자리 표시자의 하위 보기를 조회하면 문제가 되지 않습니다.

// 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);

*그렇게 나쁘지는 않습니다.

그사용수있다니습할냥▁use▁the를 사용하면 됩니다.View.setId(integer)하더라도 이 됩니다.XML에서 String ID를 설정하더라도 이 ID는 정수로 변환됩니다.로 인해, " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 을 할 수 .Views프로그래밍 방식으로 추가합니다.

에 의하면View

이 보기의 계층에서 식별자가 고유할 필요는 없습니다.식별자는 양수여야 합니다.

따라서 원하는 임의의 양의 정수를 사용할 수 있지만 이 경우 동일한 ID를 가진 보기가 있을 수 있습니다.계층 구조에서 일부 보기를 검색하려면 setTag를 호출하는 것이 유용할 수 있습니다.

답변에 대한 크레딧.

예, 전화하셔도 됩니다.setId(value)의 (양) 에서 원는양 (의) 정하가임진뷰의의에다서수값다찾음을 사용하여 .findViewById(value)전화를 걸어도 유효합니다.setId()서로 다른 형제 보기에 대해 동일한 값을 사용하지만findViewById()첫 번째 항목만 반환합니다.

언급URL : https://stackoverflow.com/questions/8460680/how-can-i-assign-an-id-to-a-view-programmatically

반응형