2012-03-08 4 views
0

제목처럼 말합니다 메신저 안드로이드 새로운. 나는 이미 꽤 많이 배웠다. 내 코드에서 내가 더 잘할 수있는 것이 있는지 알고 싶습니다. 그런 간단한 앱에는 너무 많은 것 같습니다. 통합 할 수있는 항목은 무엇입니까? 또한 사용자가 번호를 입력하기 전에 제출을 누를 때 나는 잡으려고 무엇을 권하고 싶습니다.Android가 처음입니다. 제발 도와주세요 문제를 지적하십시오

package com.michaelpeerman.probability; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnCancelListener; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.inputmethod.EditorInfo; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.TextView.OnEditorActionListener; 
import android.widget.Toast; 

import java.util.Random; 

public class ProbabilityActivity extends Activity implements OnClickListener { 

private Button submit; 
ProgressDialog dialog; 
int increment; 
Thread background; 
int heads = 0; 
int tails = 0; 
int maximum; 
EditText max; 

String max_string = "1000000"; 
int max_int = 1000000; 

public void onCreate(Bundle paramBundle) { 
    super.onCreate(paramBundle); 
    setContentView(R.layout.main); 
    submit = ((Button) findViewById(R.id.submit)); 
    submit.setOnClickListener(this); 
    EditText max = (EditText) findViewById(R.id.number); 
    max.setOnEditorActionListener(new OnEditorActionListener() { 

     public boolean onEditorAction(TextView v, int actionId, 
       KeyEvent event) { 
      if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) 
        || (actionId == EditorInfo.IME_ACTION_DONE)) { 
       submit(); 
      } 
      return false; 

     } 
    }); 

} 

public void onClick(View view) { 
    submit(); 

} 

public void submit() { 
    EditText max = (EditText) findViewById(R.id.number); 
    maximum = Integer.parseInt(max.getText().toString()); 
    if (maximum >= max_int) { 
     maximum = max_int; 
     max.setText(max_string); 
     Context context = getApplicationContext(); 
     CharSequence text = "You entered a number greater than ten million. Setting number to ten million."; 
     int duration = Toast.LENGTH_LONG; 

     Toast toast = Toast.makeText(context, text, duration); 
     toast.show(); 
     startThread(); 

    } else { 
     startThread(); 
    } 
} 

public void startThread() { 
    increment = 1; 
    dialog = new ProgressDialog(this); 
    dialog.setCancelable(true); 
    dialog.setMessage("Flipping Coin..."); 
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    dialog.setProgress(0); 
    dialog.setMax(maximum); 
    dialog.show(); 
    dialog.setOnCancelListener(new OnCancelListener() { 

     public void onCancel(DialogInterface dialog) { 

      background.interrupt(); 
      TextView result = (TextView) findViewById(R.id.result); 
      result.setText("heads : " + heads + "\ntails : " + tails); 

     } 
    }); 

    background = new Thread(new Runnable() { 
     public void run() { 
      heads = 0; 
      tails = 0; 
      for (int j = 0; !Thread.interrupted() && j < dialog.getMax(); j++) { 
       int i = 1 + new Random().nextInt(2); 
       if (i == 1) 
        heads++; 
       if (i == 2) 
        tails++; 
       progressHandler 
       .sendMessage(progressHandler.obtainMessage()); 
      } 
     } 
    }); 
    background.start(); 
} 

Handler progressHandler = new Handler() { 
    public void handleMessage(Message msg) { 

     dialog.incrementProgressBy(increment); 
     if (dialog.getProgress() == dialog.getMax()) { 
      dialog.dismiss(); 
      TextView result = (TextView) findViewById(R.id.result); 
      result.setText("heads : " + heads + "\ntails : " + tails); 

     } 
    } 

}; 

} 

답변

0

이 질문은 너무 일반적입니다. 그러나 처음에는 UI 스레드에 데이터를 게시하는 백그라운드 스레드에 AsyncTask을 사용하려고 할 수 있습니다. 그들은 훨씬 사용하기 쉽습니다.

사용자가 숫자를 쓰지 않을 경우 대화 또는 토스트 알림을 표시하고 백그라운드 스레드를 시작하지 않습니다.

+0

AsyncTaask에 대해 배우기에 좋은 곳은 어디입니까? – mpeerman

+0

제공된 링크를 클릭하십시오. – SztupY

관련 문제