2013-05-13 1 views
0

간단한 메모리 게임을 만들고 싶습니다. 16 버튼을 사용했습니다. 특정 버튼을 눌렀을 때 반응하는 방법을 알고 있지만 각 버튼을 클릭하고 일치 버튼 이 선택되었는지 (지금은 필요하지 않음)으로 선택하면 어떻게 반응합니까? XML로2 버튼을 클릭하면 안드로이드가 반응합니다.

+1

당신은 이것을 위해 플래그를 사용하여 마지막 값과 새로운 값을 기억할 수 있습니다. – Noundla

+0

감사합니다. 좋은 생각입니다. 그리고 16 개 대신에 1 개의 onclike 만 할 수있는 방법이 있습니까? – user1932595

+0

은 각 버튼의 XML에서'onClick = "functionName"을 설정하거나 동일한 리스너 button1.setOnClickListener (this)에 할당합니다. 첫 번째 방법이 더 좋습니다 IMHO – codeMagic

답변

0

는, 당신은 위의 XML의 onClick 속성에 같은 이름을 정의한 각 Button

<Button 
    android:id="@+id/btn1" 
    ... 
    android:onClick="btnClick"/> 
<Button 
    android:id="@+id/btn2" 
    ... 
    android:onClick="btnClick"/> 

을 위해 그리고 당신의 자바 코드에 onClick의 기능이 공개되어 있는지 확인 동일한 이름을 사용 유일한 매개 변수는 View입니다. 제안대로 View이 될 것입니다 Button 당신이 그 id 그에 switch을 얻을 if/else를 사용하거나

public void btnClick(View v) 
{ 
    switch(v.getId()) // v is the btn that was clicked so this will give you its id 
    { 
     case (R.id.btn1): btn1 was clicked 
     ... do stuff 

첫 번째 질문에 대답하기 것을 처리하는 그러나, 당신이 플래그를 사용할 수 있습니다 그래서 클릭 이전 또는 카운터 및 카운터가 == 2라고 말하면 원하는대로 클릭합니다. 그 다음 당신이 Button이 두 번째 클릭에 비교 무엇을 나타내는 값을 저장하지 않을 경우

다른 방법은 for loop에서 그들을 설정하는 것입니다, 당신이 그렇게 loop을 나는 것입니다 설정하는 방법을 알고 있다고 가정 당신은 내가 프로그램을 만들 수 있었다 논리를 사용 OnClickListener()

+0

감사합니다. 각 단추를 이와 같이 얻으면 : (16 단추) \t 단추 [1] = (단추) findViewById (R.id.button1_mg); 사례 (v == button [i])를 요청할 수 있습니까? – user1932595

+0

코드에서 각'Button '을 인스턴스화하려면 다른 메소드를 사용하고 동일한 onClickListener()를 사용하십시오. 내가 보여준 첫 번째 방법은 그 중 하나를 할 필요가 없어 유지 – codeMagic

+0

그래서 나는 다른 질문이 있습니다. 나는 나의 기억력 게임에 이것을 요구했다. 버튼의 단어는 * tun time *의 배열에서 임의로 선택됩니다. 각 단추를 인스턴스화하지 않는 방법이 있습니까? – user1932595

0

구현이 짧은

for (int i=0; i<buttons.size(); i++) 
{ 
    ... 
    button[i].setOnClickListener(ActivityName.this); 
} 

@Override 
public void onClick(View v) 
{ 
    int id = v.getId(); 
} 

이 있는지 확인하십시오 유지하지만, 매우 긴합니다. 각 버튼의 경우는 동일한 기능을 수행한다 :

Button B1; 
    int x,y; //give them values and compare (example: B1=1, B2=2, B3=1 .. B1&B3 the same picture) 
    int turn = 1; //to know whos turn (x or y), default start on x 
    int numberOfClicks=0; //when 2 buttons clicked, check 

    //in the OnCreate() 
    B1 = (Button) findViewById(R.id.b1); //assume B1's value = 1 
    B1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { //------------------------------------ OnClick Starts here 

      if (turn==1){ 
      //use x 
       x=1; 
       turn=2; //flip the turn 
       numberOfButtons++; //one is clicked so far 
      }else{ 
      //use y 
       y=1; 
       turn=1; 
       numberOfButtons++; 
      } 


      if(numberOfButtons==2){ 
      //check 
       if(x==y){ 
       //same 
       numberOfButtons=0; //restart counter 
       }else{ 
       //not the same 
       numberOfButtons=0; //restart counter 
      } 

     }//end of OnClick   

    }); //end of button OnClickListener 

B2 = 7 다음의 OnClick에서, X 및 Y = 7 각각의 OnClick 가질 것이다하는 경우는 서로 다른 X 및 Y 값.

+0

이것은 'onClickListener()'사용의 문제를 해결하지 않습니다. – codeMagic

관련 문제