Настройка содержимого строки - PullRequest
0 голосов
/ 27 августа 2010

Я пытаюсь сделать таймер, в который вы можете вставить, сколько времени вы хотите, нажав на просмотр текста или какую-то другую кнопку.Моя проблема в том, что я не могу понять, как правильно сделать код, чтобы он установил строку.Строка является той, которая установлена ​​перед классом в строке xml.Вот код, с которым я работаю.Это диалог, который показывает, когда вы хотите установить строку.Благодарю.Length2 - строка, которая содержит ошибку.

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();} 

    });

моя строка 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; 
    }
};

}

1 Ответ

0 голосов
/ 09 мая 2011

Это то, что я вижу как проблему:

length2 не определено как поле в вашем коде, вы копируете ссылочный идентификатор для содержимого того, что вы определили в strings.xmlв переменную int length.Вы никогда не определяете поле length2.Я обнаружил это, когда поместил ваш код в Eclipse.

Я не уверен, что вы пытаетесь с этим сделать, но мое обоснованное предположение следующее: вы пытаетесь зафиксировать введенное пользователем время, необходимое для обратного отсчетаотображать где-то (возможно, в TextView timeDisplay);из-за вашего использования length2.setText().

Кроме того, оператор: int length = R.string.length2; будет копировать шестнадцатеричный идентификатор для строки, а не самой строки.Поэтому, если у вас есть в файле strings.xml: <string name="lenght2">100</string> и вы хотите, чтобы это число было сохранено в length, попробуйте изменить это утверждение на:

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

Надеемся, это поможет вам в правильном направлении длячто вы пытаетесь достичь.

Стив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...