2010-08-27 91 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