2010-08-27 246 views
0

我正在嘗試製作一個計時器,您可以通過單擊textview或其他按鈕來插入多少時間。我的問題是我無法弄清楚如何讓代碼正確,以便它將設置字符串。該字符串是在字符串xml中的類之前設置的字符串。這是我正在使用的代碼。這是顯示何時設置字符串的對話框。謝謝。長度2是錯誤的字符串。設置字符串內容

我的字符串XML

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="hello">Hello World, Score!</string> 
    <string name="app_name">Basketball Score Keeper</string> 
    <string name="start">Start</string> 
    <string name="pause">Pause</string> 
    <string name="resume">Resume</string> 
    <string name="restart">Restart</string> 
    <string name="timer">00:00</string> 
    <string name="length2">10000</string> 

</resources> 

我完整的代碼

import android.app.Activity; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnLongClickListener; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemSelectedListener; 

public class Score extends Activity implements AdapterView.OnItemSelectedListener { 

    private Button Button01; 
    private Button Button02; 
    private Button Button03; 
    private Button Button04; 
    private TextView TextView01; 
    private TextView TextView02; 
    private TextView TextView03; 
    private TextView TextView06; 
    private Spinner Spinner01; 
    private Spinner Spinner02; 

    TextView timeDisplay; 
    int state = 0; 
    int length = R.string.length2; 
    long startTime = 0; 
    long currentTime = 0; 
    long timeElapsed = 0; 
    long timeRemaining = 0; 
    long prevTimeRemaining = 0; 
    Button control; 
    MyCount counter; 

    String[] goal={"Three", "Foul", "Two"}; 


    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 



     Button01 = (Button) findViewById(R.id.Button01); 
     Button02 = (Button) findViewById(R.id.Button02); 
     Button03 = (Button) findViewById(R.id.Button03); 
     Button04 = (Button) findViewById(R.id.Button04); 

     TextView01 = (TextView) findViewById(R.id.TextView01); 
     TextView02 = (TextView) findViewById(R.id.TextView02); 
     TextView03 = (TextView) findViewById(R.id.TextView03); 
     TextView06 = (TextView) findViewById(R.id.TextView06); 



     Spinner spin = (Spinner) findViewById(R.id.Spinner01); 
     spin.setOnItemSelectedListener((OnItemSelectedListener) this); 

     ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, goal); 

     aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spin.setAdapter(aa); 


     Button01.setOnLongClickListener(subtractLeft); 
     Button02.setOnClickListener(new Button.OnClickListener() {public void onClick(View v){my_func1();}}); 
     Button03.setOnLongClickListener(subtractRight); 
     Button04.setOnClickListener(new Button.OnClickListener() {public void onClick(View v){my_func2();}}); 

     timeDisplay = (TextView) findViewById(R.id.timer); 
     timeDisplay.setOnLongClickListener(new View.OnLongClickListener() { 
      public boolean onLongClick(View view) { 
       Dialog dialog = new Dialog(Score.this); 
       dialog.setContentView(R.layout.custom_dialog); 
       dialog.setTitle("Set Time"); 
       dialog.setCancelable(true); 


       final EditText min = (EditText) dialog.findViewById(R.id.min); 

       final EditText sec = (EditText) dialog.findViewById(R.id.sec); 

       Button btn = (Button)dialog.findViewById(R.id.positive); 
       btn.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 

         Double min2 = Double.parseDouble(min.getText().toString()); 
         Double sec2 = Double.parseDouble(sec.getText().toString()); 

         {Double time = ((min2 * 60) + sec2); 

         length2.setText(time.toString()); 
         } 

        }}); 

       dialog.show();} 

       }); 







     control = (Button) findViewById(R.id.control); 
     counter = new MyCount(length, 100); 
     } 

     public void control(View view) { 
     switch (state) { 
     case 0: 
      startTime = System.currentTimeMillis(); 
      counter.start(); 
      control.setText(R.string.pause); 
      state = 1; 
      break; 
     case 1: 
      // pause 
      currentTime = System.currentTimeMillis(); 
      timeElapsed = currentTime - startTime; 

      if (prevTimeRemaining == 0) 
      timeRemaining = length - timeElapsed; 
      else 
      timeRemaining = prevTimeRemaining - timeElapsed; 
      counter.cancel(); 
      timeDisplay.setText(formatTime(timeRemaining)); 
      control.setText(R.string.resume); 
      prevTimeRemaining = timeRemaining; 

      // resume 
      counter = new MyCount(timeRemaining, 100); 
      state = 0; 
      break; 
     case 2: 
      prevTimeRemaining = 0; 
      counter = new MyCount(length, 100); 
      control.setText(R.string.start); 
      timeDisplay.setText(R.string.timer); 
      state = 0; 
     } 
     } 

     public class MyCount extends CountDownTimer { 

     public MyCount(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     public void onFinish() { 
      timeDisplay.setText("done!"); 
      state = 2; 
      control.setText(R.string.restart); 
     } 

     public void onTick(long millisUntilFinished) { 
      timeDisplay.setText(formatTime(millisUntilFinished)); 
     } 
     } 




     public String formatTime(long millis) { 
      String output = "00:00"; 
      long seconds = millis/1000; 
      long minutes = seconds/60; 
      // long hours = minutes/60; 

      seconds = seconds % 60; 
      minutes = minutes % 60; 
      // hours = hours % 60; 

      String secondsD = String.valueOf(seconds); 
      String minutesD = String.valueOf(minutes); 
      // String hoursD = String.valueOf(hours); 

      if (seconds < 10) 
      secondsD = "0" + seconds; 
      if (minutes < 10) 
      minutesD = "0" + minutes; 
      // if (hours < 10) 
      // hoursD = "0" + hours; 

      output = minutesD + " : " + secondsD; 
      return output; 
     } 


    public void setSpinner02(Spinner spinner02) { 
     Spinner02 = spinner02; 
    } 

    public Spinner getSpinner02() { 
     return Spinner02; 
    } 

    public void setSpinner01(Spinner spinner01) { 
     Spinner01 = spinner01; 
    } 

    public Spinner getSpinner01() { 
     return Spinner01; 
    } 

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) 
    { 
    if ("Three".equals(goal[position])) 
    {TextView03.setText("3");} 

    if ("Foul".equals(goal[position])) 
    {TextView03.setText("1");} 

    if ("Two".equals(goal[position])) 
    {TextView03.setText("2");} 

    } 

    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
     TextView03.setText("2"); 
     TextView06.setText("2"); 

    } 


    void my_func1() { 
     int scoreLeft; 
     int addOne; 
     int scoreLeftTotal; 

     addOne = Integer.parseInt(TextView03.getText().toString()); 
     scoreLeft = Integer.parseInt(TextView01.getText().toString()); 

     scoreLeftTotal = (scoreLeft + addOne); 

     TextView01.setText("" + scoreLeftTotal); 
     } 


    void my_func2() { 
      int scoreRight = Integer.parseInt(TextView02.getText().toString()); 
      int addOne = Integer.parseInt(TextView03.getText().toString()); 

      {int scoreRightTotal = (scoreRight + addOne); 

      TextView02.setText("" + scoreRightTotal); 
      } 

    } 
    private OnLongClickListener subtractLeft = new OnLongClickListener() { 
     public boolean onLongClick(View v) { 
     int scoreLeft = Integer.parseInt(TextView01.getText().toString()); 
     int addOne = Integer.parseInt(TextView03.getText().toString()); 

     {int scoreLeftTotal = (scoreLeft - addOne); 

     TextView01.setText("" + scoreLeftTotal); 
     } 

     return true; 
     } 
}; 
private OnLongClickListener subtractRight = new OnLongClickListener() { 
    public boolean onLongClick(View v) { 
    int scoreRight = Integer.parseInt(TextView02.getText().toString()); 
    int addOne = Integer.parseInt(TextView03.getText().toString()); 

    {int scoreLeftTotal = (scoreRight - addOne); 

    TextView02.setText("" + scoreLeftTotal); 
    } 

    return true; 
    } 
}; 

}

+0

什麼類型是長度2? – Milan 2010-08-27 01:56:11

+0

你看到什麼錯誤?嘗試發佈更多細節。 – 2010-08-27 02:36:11

+0

Length2是我在string.xml中聲明的字符串。稍後當我有我的東西在我面前時,我會發布更多信息。我相信這個錯誤是一個說它不能識別長度的類型2 – 2010-08-27 16:02:16

回答

0

這是我看到的問題:

length2沒有被定義爲一個fi在您的代碼中,您正在將您在strings.xml中定義的內容的參考ID複製到int length變量中。你永遠不會定義字段length2。我將代碼放入Eclipse時發現了這一點。我不知道你在做什麼,但我的教育猜測是這樣的:你試圖捕獲用戶輸入的時間倒數所需的時間顯示在某處(可能在TextView timeDisplay);因爲你使用length2.setText()

此外,聲明:int length = R.string.length2;將複製字符串的十六進制ID,而不是字符串本身。所以,如果你有在strings.xml文件:<string name="lenght2">100</string>和你想要的號碼存儲到length,然後嘗試改變這種說法爲:

String s_length = getString(R.string.length2); 
int length = Integer.parseInt(s_length); 

希望這有助於你在正確的方向你要完成的任務。

Steve