2017-05-14 12 views
0

첫째, 난 이미 시도 : Continuously increase integer value as the button is pressed핸들러를 사용하여 텍스트 뷰의 값을 늘리는 방법은 무엇입니까? (또는 다른 솔루션) 모든

을하지만 난 59 오류, 옙, 59가 있고, 내가 Eclipse를 사용하는 사용하는 당신이 어떻게 한 오류 명확하게 어떤 종류의 당신에게 그것을 고치기 위해 Android Studio는 경험이있는 사람들을 위해 만들어진 것처럼 보입니다 ... 모든 오류를 수정하기 위해 무엇을 해야할지 이해할 수 없습니다. (btw, 내가 뭔가를 고치려고 할 때 어떻게 든 더 잘 깰 수 있습니다).

그래서 ... 주어진 Button과 TextView 어떻게하면 Texture (예 : Clicker 게임)를 늘리고 동일한 버튼을 다시 누르는 것을 멈추게합니까? 그리고 어떻게 각 간격을 넣을까요? 내가 정확히 스레드 나 핸들러는 예 모두가 나에게 문서를 권장합니다, 어떻게 작동하는지 이해하는 데 필요한, 내가 솔루션을 필요로하지 않습니다 ... 그런데

TextView score = (TextView) findViewById(R.id.textView); 
score.setText(Integer.toString(i)); 

    Button click = (Button) findViewById(R.id.button2); 
    click.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      i++; 
      score.setText(Integer.toString(i)); 

     } 
    }); 

을 "클릭"하지만 난 간단한 볼 필요가 예제는 파트별로 설명되어 있으며 문서를 읽으면 이미 수행 한 것보다 더 많은 것을 이해할 수 있습니다.

+0

첫 번째 오류로 시작하십시오. 이게 뭐야? 어떤 코드 행이 그 원인이됩니까? –

+0

"어떻게 든 나에게 10 개 이상을 고치려고 할 때"이것은 모든 프로그래머가 가장 많이 경험하는 일반적인 경험이다. –

+0

"스레드 또는 처리기의 작동 방식을 이해해야합니다."스레드는 파일을 읽거나 이미지를 다운로드하는 등 오랜 시간이 걸립니다. 핸들러는 스레드 간의 통신을위한 것입니다. 당신은 당면 과제를 완수하기 위해 이들 중 어느 것도 필요로하지 않습니다. –

답변

1

내가 정확히 스레드 방법을 이해하는 것이 필요하거나 핸들러

작동이 문제가 Thread 또는 Handler 필요하지 않습니다.

네 모든 사람들이 나에게 내가 책을 읽고 추천 할 것입니다 문서

을 추천합니다.

는하지만 난 간단한 예는 책에 대한 어떤 부품

에 의해 부분적으로 설명을 참조 할 필요가있다. 문서는이 부분과 부분을 다루지 만 대부분이 참조 자료입니다.

감안할 버튼과 난 (예를 들어 클리 게임 같은) 텍스트 뷰를 증가시키고 다시 같은 버튼을 눌러 중지하기 위해 무엇을 어떻게 텍스트 뷰 : 그리고 각각의 "클릭"사이의 간격을 넣어 어떻게 귀하의 질문에서

을 감안하여 scoreclick 위젯 :

단계 # 1 : 당신의 활동이나 조각에 Runnable 필드를 추가합니다. 여기서는 incrementer이라고 할 것입니다.

2 단계 : 원하는 지연 기간 (밀리 초 단위)을 사용하여 활동 또는 단편에 static final int DELAY 필드를 정의하십시오.

단계 # 3 : incrementer의 상태에 따라, 당신의 Button 사용 postDelayed()removeCallbacks() 유무 :

click.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
    if (incrementer==null) { 
     incrementer=new Runnable() { 
     @Override 
     public void run() { 
      i++; 
      score.setText(Integer.toString(i)); 
      v.postDelayed(incrementer, DELAY); 
     } 
     }; 
     incrementer.run(); 
    } 
    else { 
     v.removeCallbacks(incrementer); 
     incrementer=null; 
    } 
    } 
} 

incrementer 필드는 두 가지 역할을 제공합니다. TextView 콘텐츠를 증가시키는 지 여부를 추적하며 증가하는 실제 코드입니다.

incrementernull 인 경우 현재 TextView이 증가하지 않습니다. 따라서 incrementerTextView을 증가시킬 수있는 Runnable을 할당합니다. RunnablepostDelayed()으로 전화하여 "이봐,이 RunnableDELAY 밀리 초 후에 다시 실행하십시오"라고 말합니다. 우리는 run()Runnable 처음으로 TextView을 채우고 postDelayed() 호출을 실행하여 다음 증분을 예약합니다.

다음에 "루프"를 계속

사용자가 다시 버튼을 클릭 할 때까지 (run()run()에 미래의 호출을 예약, postDelayed()를 호출). 그런 다음 incrementer이 아니며null이 아니므로 TextView이 증가하므로 중지해야합니다. removeCallbacks()은 마지막 postDelayed() 호출을 스케줄 해제하여 "루프"를 중지합니다. 우리는 incrementernull으로 설정하여 주로 다음 버튼 클릭에 대비했습니다.

+0

"정답"틱에 늦어서 죄송합니다. D 그리고 설명에 감사드립니다. –