2013-02-18 2 views
1

현재 안드로이드 응용 프로그램에서 작업 중이며 몇 가지 질문이 있습니다.Android : 많은 버튼, OnClickListener 하나?

1) 내 응용 프로그램에는 Battery Mod 섹션이 있으며 50 개가 넘는 버튼이 있습니다. 같은 :?.

public class MyActivity extends Activity implements OnClickListener { 

    @Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button buttonA = (Button) findViewById(R.id.buttonA);  
    buttonA.setOnClickListener(this); 
    Button buttonB = (Button) findViewById(R.id.buttonB); 
    buttonB.setOnClickListener(this); 
    } 

//etc... etc... 

public void onClick(View v) { 

    switch (v.getId()) { 
    case R.id.buttonA: 
     // do something 
     break; 
    case R.id.buttonB: 
     // do something else 
     break; 
    } 
} 
} 

이 할 수있는 간단한 방법이 있나요 당신이 배터리 모드 버튼을 클릭하면, 그것을 설치하는 옵션과 함께 모드의 이미지를 표시합니다 기타 이미지보다, 그것은 ' 각 모드와 동일 할 것입니다. 더 간단한 방법이 없다면

+1

당신이 좀 더 쉽게, 당신은 안드로이드를 지정할 수 있습니다 확인하려면 : xml의 ​​버튼에 대한 onClick. 그러면 버튼을 클릭 할 때 호출되는 함수가 제공됩니다. 이 함수는 Activity의 멤버 여야합니다. 수십 세트의 통화를 작성하는 것보다 쉽습니다. –

+0

질문을 두 개로 나눠서 각 질문에 대한 구체적인 답변을 얻을 수 있습니다. SO에 대한 각 게시물은 그것에 하나의 질문 만 있어야합니다. – 323go

+1

귀하의 질문은 귀하의 제목과 일치해야합니다. 밀접하게 관련되어 있고 제목과 여전히 일치하는지 여러 번 질문 할 수 있습니다. 하지만 두 번째 질문은 그렇지 않은 것처럼 보입니다. – wtsang02

답변

0

이드는 다른 점이 있습니다. 따라서 반복 할 수 없으며, 당신처럼을 입력해야합니다 다음 루프

private static final BUTTON_IDS={R.id.buttonA,R.id.buttonB,R.id.buttonC....R.id.buttonZ}; 

그것은 :

for(int i=0;i<BUTTON_IDS.lenght;i++{ 
     Button buttonXYZ = (Button) findViewById(BUTTON_IDS[i]);  
     buttonXYZ.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
        if(...){ 
         //your spical cases 
        } 
        else{ 
         //do awesome generic stuff. 
        } 

        } 
       }); 
    } 
1

당신은 너무처럼 버튼을 반복 할 수 있습니다 - 모든보기에

int[] buttons = { R.id.button1, R.id.button2, ... , R.id.button30 }; 

for(int i=0; i < buttons.length; i++) { 
    final Button b = (Button) findViewById(buttons[ i ]); 
    b.setOnClickListener(...); 
} 
+0

확인. 나는 아직도 조금 혼란 스럽다. 어쩌면 나는 단지 n00b에 불과할 것입니다. 따라서 button이라는 새로운 정수를 만든 다음 그 안에 버튼의 ID를 추가하십시오. 그런 다음 for 루프를 작성합니다. 정수 i가 정수 버튼의 다리 길이보다 작 으면 int i에 1을 더합니다. 그런 다음 정수 i의 단추와 동일한 단추 b를 만든 다음이 단추에 대한 OnClickListener를 설정합니다. 나는 이것을 어떻게 사용하는지 정말로 이해하지 못한다. – user2082169

+0

'[]'옆에있는'int'는 정수 배열입니다.for-loop는 배열의 모든 요소들을 따라 가며 각 항목은'Button'을 찾고 OnClickListener를 할당합니다. – 323go

+0

아, 알겠습니다. 감사! – user2082169

3

하나의 유용한 구성 요소 이 목적을 위해 많이 논의되지 않은 것은 tag 속성입니다. 당신은 어떤 개체에 대한보기의 태그를 설정할 수 있습니다 당신은 쉽게 이미지, 또는 아마도 Drawable 자원의 ID의 이름에 태그를 지정하려면이 옵션을 사용할 수 있습니다

Object foo = new Object(); 
button1.setTag(foo); 

. 그리고이 모든 버튼에 대해 하나의 onClick 방법을 사용하고, 단순히 태그를 풀고 그것을 어떻게 사용해야할지 결정합니다 :

public void onClick(View v) 
{ 
    //any button was clicked. Now determine what to do using the tag. 

    Object tag = v.getTag(); 
    //TODO: use tag. 


} 
2

당신은 레이아웃 파일에서 각 버튼의 OnClick 콜백을 설정할 수 있습니다. 뭔가 같이 : 다음

<Button 
    android:id="@+id/buttonId" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/buttonText" 
    android:onClick="onItemClick" /> 

, 당신은 당신의 활동/조각에 추가 :

public void onItemClick(View view) { 
    // Do something in response to button click 
} 
여기

더 많은 정보 : http://developer.android.com/guide/topics/ui/controls/button.html#HandlingEvents