1

アクティビティ1からアクティビティ2にcountdownTimer値を渡して、アクティビティ1から取得した値からアクティビティ2のカウントダウンタイマーを開始しようとしていますが、の開始点を作成する方法がわかりませんでした。アクティビティ2のタイマーを変数として使用します。これがアクティビティ1のコードです。

    new CountDownTimer(20000, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);

        }
        public void onFinish() {
            tv.setText("done!");
        }
     }.start();

    next.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i = new Intent(MainActivity.this, Page2.class);
            i.putExtra("timervalue", tv.getText());
            startActivity(i);
        }

    });

これがアクティビティ2のコードです

    Bundle bundle = getIntent().getExtras();  
    long value = Long.parseLong(bundle.getString("timervalue"));
    new CountDownTimer(value, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);
        }
        public void onFinish() {
            tv.setText("done!");
        }
     }.start();  

また、バンドルの代わりにIntetを使用して、このようなアクティビティ2を作成しようとしました

    Intent results = this.getIntent();
    String s = results.getExtras().getString("timervalue");
    long value = Long.parseLong(s);

    new CountDownTimer(value, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);
        }
        public void onFinish() {
            tv.setText("done!");
        }
     }.start();  

putExtraとgetExtraのときにエラーが発生したと思いますが、よくわかりません。Javaの初心者なので、助けてください...ありがとうございます。

4

2 に答える 2

1

これは適切なコードです

アクティビティ1で

long remainingtime;

そして onCreate の下で

 new CountDownTimer(20000, 1000) {

        public void onTick(long millisUntilFinished) {
            Counter.setText("Time left: " + millisUntilFinished / 1000);
                remainingtime=millisUntilFinished;
        }

        public void onFinish() {
        Counter.setText("done!");
    }}.start();  



public void onClick(View v) {

Intent i = new Intent(Activity1.this, Activity2.class);

   Bundle timetransfer=new Bundle();
    timetransfer.putLong("timer", remainingtime);
        i.putExtras(timetransfer);

アクティビティ2

Under onCreate



Bundle timetransfer = getIntent().getExtras();

                long time =timetransfer.getLong("timer");


        new CountDownTimer(time, 1000) {

            public void onTick(long time) {
                Counter2.setText("Time Left: " time / 1000);
            }

            public void onFinish() {
                Counter2.setText("Time is UP!");

                finish();    }

         }.start();

この部分を消去する必要があります:

long_remaingtime=millisUntilFinished / 1000;

そしてちょうど置く

long_remaingtime=millisUntilFinished;

あなたの場合、約 20000(millisUntilFinished) を 1000 で割り、経過時間に応じて約 20 秒を取得し、その下にこの数値を再度 1000 で割るコードを配置したためです。したがって、次のアクティビティでは、時間が経過したというエラーが自動的に発生します。

于 2014-08-30T02:45:54.483 に答える
0

現在、次の Activity に渡さ"seconds remaining: "+...れており、それを Long に解析しようとするとNumberFormatException、次の Activity に入ることになります。追加の変数を使用して、CountDownTimer名前の変更時間を次のアクティビティに次のように渡します。

public long long_remaingtime=20L;
 new CountDownTimer(20000, 1000) {
        public void onTick(long millisUntilFinished) {
            tv.setText("seconds remaining: " + millisUntilFinished / 1000);
            long_remaingtime=millisUntilFinished / 1000; //<<< 
        }
        public void onFinish() {
            tv.setText("done!");
            long_remaingtime=20L; //<< set default here
        }
     }.start();

    next.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i = new Intent(MainActivity.this, Page2.class);
            i.putExtra("timervalue", long_remaingtime);
            startActivity(i);
        }

    });

次のアクティビティでは、次のようにタイマー値を取得します。

Intent results = this.getIntent();
long value = results.getExtras().getLong("timervalue");
于 2013-02-05T20:45:52.820 に答える