반응형
Android : 루프에서 문자열 /과 함께 findViewById () 사용
저는 각각 특정 콜백이있는 수백 개의 버튼으로 구성된 뷰가있는 Android 애플리케이션을 만들고 있습니다. 이제는 각 버튼에 대해 수백 줄의 코드를 작성하는 대신 루프를 사용하여 이러한 콜백을 설정하고 싶습니다.
내 질문은 : 정적으로 각 버튼 ID를 입력하지 않고도 findViewById를 어떻게 사용할 수 있습니까? 내가하고 싶은 것은 다음과 같습니다.
for(int i=0; i<some_value; i++) {
for(int j=0; j<some_other_value; j++) {
String buttonID = "btn" + i + "-" + j;
buttons[i][j] = ((Button) findViewById(R.id.buttonID));
buttons[i][j].setOnClickListener(this);
}
}
미리 감사드립니다!
당신은 사용해야합니다 getIdentifier()
for(int i=0; i<some_value; i++) {
for(int j=0; j<some_other_value; j++) {
String buttonID = "btn" + i + "-" + j;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i][j] = ((Button) findViewById(resID));
buttons[i][j].setOnClickListener(this);
}
}
모든 버튼 ID를 보유하는 int []를 만든 다음이를 반복 할 수 있습니다.
int[] buttonIDs = new int[] {R.id.button1ID, R.id.button2ID, R.id.button3ID, ... }
for(int i=0; i<buttonIDs.length; i++) {
Button b = (Button) findViewById(buttonIDs[i]);
b.setOnClickListener(this);
}
다음 답변을 살펴보십시오.
액세스하려면 태그를 사용할 수 있습니다.
에 onClick
int i=Integer.parseInt(v.getTag);
그러나 이와 같은 버튼에 액세스 할 수 없습니다.
프로그래밍 방식으로 버튼 생성
으로 Button b=new Button(this);
아래에 표시된 것처럼 Xml이 아닌 Java 코드로 사용자 정의 버튼을 만듭니다.
Button bs_text[]= new Button[some_value];
for(int z=0;z<some_value;z++)
{
try
{
bs_text[z] = (Button) new Button(this);
}
catch(ArrayIndexOutOfBoundsException e)
{
Log.d("ArrayIndexOutOfBoundsException",e.toString());
}
}
최상위보기에 해당 단추보기 만 자식으로있는 경우 다음을 수행 할 수 있습니다.
for (int i = 0 ; i < yourView.getChildCount(); i++) {
Button b = (Button) yourView.getChildAt(i);
b.setOnClickListener(xxxx);
}
더 많은 뷰가있는 경우 선택한 뷰가 버튼 중 하나인지 확인해야합니다.
어떤 이유로 getIdentifier()
기능을 사용할 수 없거나 가능한 ID를 미리 알고있는 경우 스위치를 사용할 수 있습니다.
int id = 0;
switch(name) {
case "x":
id = R.id.x;
break;
etc.etc.
}
String value = findViewById(id);
참고 URL : https://stackoverflow.com/questions/4865244/android-using-findviewbyid-with-a-string-in-a-loop
반응형
'Programing' 카테고리의 다른 글
MyApp.vshost.exe를 죽일 수 없습니다. (0) | 2020.12.08 |
---|---|
루비에서 가장 가까운 정수로 부동 소수점 반올림 (0) | 2020.12.08 |
Ruby on Rails 스위치 (0) | 2020.12.08 |
특성과 정책의 차이점은 무엇입니까? (0) | 2020.12.08 |
"using namespace std"의 용도는 무엇입니까? (0) | 2020.12.08 |