보기에 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:id의int"" 사용여코드값를하"를 사용한R.id.name" ( some name (어떤 이름) - 빌드에서 빌드로 변경될 수 있으므로 ID를 복사하지 마십시오.
gen/package.name/R.java그냥 "를 사용하세요.R.id.어떤 이름." - , (또한,한,
id에PreferenceXML은 다음과 같은 경우에 사용되지 않습니다.Preference를 생성합니다.View.)
할당id코드를 통해(프로그래밍 방식으로)
- 으로 설정하기
id용하여를 합니다.someView.setId(트인에); - 그
int긍정적이어야 하지만, 그렇지 않으면 임의적입니다. 원하는 대로 될 수 있습니다(무섭다면 계속 읽으십시오). - 예를 들어 항목을 나타내는 여러 뷰를 만들고 번호를 지정하는 경우 해당 항목 번호를 사용할 수 있습니다.
의고성의 ids
XML- 재 - 는밌assigned는ids는 고유합니다.- 할당 코드됨
ids는 고유할 필요가 없습니다. - 할당 코드됨
id와 합니다.XML- 재 - 는밌assigned는ids의 - 충돌하는 러한충돌.
ids는 정확하게 쿼리해도 문제가 되지 않습니다(계속 읽음).
충돌하는 시기(및 이유)id
findViewById(int)지정한 뷰의 뷰 계층을 통해 깊이 우선을 재귀적으로 반복하고 첫 번째 깊이 우선을 반환합니다.View하는 일하는항찾으로 찾습니다.id.- 지정이 한
idXML 에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
'codememo' 카테고리의 다른 글
| free()는 메모리를 제로로 만드는 것입니까? (0) | 2023.08.01 |
|---|---|
| Bottle Py: jQuery AJAX 요청에 대한 CORS 활성화 (0) | 2023.08.01 |
| Swift를 사용하여 iOS에서 SMS 보내기 (0) | 2023.08.01 |
| PHP Ajax 업로드 진행률 표시줄 (0) | 2023.07.27 |
| builder @angular-devkit/build-angular:dev-server on server 명령에 대한 구현을 찾을 수 없습니다. (0) | 2023.07.27 |