0

私はAndroidアプリケーションに取り組んでいます。私のプロジェクトには3ページあります。

  • 最初のページは1つのボタンで構成されています。
  • 2ページ目はタイマーコードで構成されています。
  • 3ページ目もボタンで構成されています。

今、私の要件は、最初のページのボタンをクリックすると、3番目のページが開き、2番目のページのタイマーが一時停止することです。もう一度、3番目のページのボタンをクリックすると、2番目のページのタイマーが停止した時刻を再開し、最初のページを開く必要があります。

私はこのタスクを達成するのに苦労しています。それを通して私を導き、それを行うために何をすべきかを提案してください。

Page1.java

rowTextView.setOnClickListener(new OnClickListener() {
  public void onClick(View v) {

    Intent myIntent = new Intent(v.getContext(),Page3.class);
    startActivity(myIntent);
    finish();                                       
  }
});

Page2.java

public class TimeractivitybestActivity extends Activity {
    EditText e1;
    MyCount counter;
    Long s1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        e1 = (EditText) findViewById(R.id.editText1);
        counter = new MyCount(15000, 1000);
        counter.start();
     }

    public void method(View v) {

        switch (v.getId()) {

        case R.id.button1:
            counter.cancel();
            break;
        case R.id.button2:
            counter = new MyCount(s1, 1000);
            counter.start();
        }
    }

    public class MyCount extends CountDownTimer {
        public MyCount(long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);
        }
        @Override
        public void onFinish() {
            e1.setText("DONE");
        }
        @Override
        public void onTick(long millisUntilFinished) {
            s1 = millisUntilFinished;
            e1.setText("left:" + millisUntilFinished / 1000);
        }
    }
}


Page3.java

public void gobacktopage1(View v)
    {
        Intent myIntent = new Intent(v.getContext(),Page1.class);
        startActivity(myIntent);
        finish();
    }
4

3 に答える 3

1

s1 である timeLeft をいつでも保存して、このように再度使用することができます。コメントも読んでください。

1)タイマーを呼び出している間、保存された時間があるかどうかを確認します

    Page1.java       
    rowTextView.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
        long time = sp.getLong("time", 0); // get saved time of times
        Intent myIntent = new Intent(v.getContext(),Page3.class); 
        myIntent.putExtra("time", time); // send it to page2
        startActivity(myIntent); 
        finish();                                        
      } 
    }); 

2) 0 でない場合は、時間を開始時間として使用します。

    Page2.java 

    public class TimeractivitybestActivity extends Activity {
        EditText e1;
        MyCount counter;
        Long s1;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            long time = this.getIntent().getLongExtra("time", 0); // get
                                                                    // saved
                                                                    // time
            time = (time != 0) ? time : 1500;
            e1 = (EditText) findViewById(R.id.editText1);
            counter = new MyCount(time, 1000); // start with saved time
            counter.start();
        }

        public void method(View v) {

            switch (v.getId()) {

            case R.id.button1:
                counter.cancel();
                break;
            case R.id.button2:
                counter = new MyCount(s1, 1000);
                counter.start();
            }
        }

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

            @Override
            public void onFinish() {
                e1.setText("DONE");
            }

            @Override
            public void onTick(long millisUntilFinished) {
                s1 = millisUntilFinished;
                e1.setText("left:" + millisUntilFinished / 1000);
            }
        }

        public void onPause() {
            SharedPreferences sp = PreferenceManager
                    .getDefaultSharedPreferences(this);
            Editor et = sp.edit();
            et.putLong("time", s1); // save time SharedPreference in onPause
            et.commit();
        }

    }

3) ページ 3 に変更はないと思います。

    Page3.java 

    public void gobacktopage1(View v) 
        { 
            Intent myIntent = new Intent(v.getContext(),Page1.class); 
            startActivity(myIntent); 
            finish(); 
        } 
于 2012-06-30T06:24:16.857 に答える
0

これがその仕組みです...

MyCount counter;
Long s1;

     counter= new MyCount(300000,1000);
    counter.start();

public void asdf(View v){  <---- method for onclick of buttons pause and resuming timer

    switch(v.getId()){



    case R.id.button1:<-- for pause

        counter.cancel();
        break;
    case R.id.button2:<--- for resume
        counter= new MyCount(s1,1000);
         counter.start();
    }
}
public class MyCount extends CountDownTimer{
    public MyCount(long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
    }
    @Override
    public void onFinish() {
    mediaplayer.stop();
   mediaplayer.release();
    }
    @Override
    public void onTick(long millisUntilFinished) {
        s1=millisUntilFinished;

    }
    }

case R.id.button1:<-- 一時停止

        counter.cancel();

これは、タイマーを一時停止して再開するために使用されるものです...

そしてあなたの場合

public void gobacktopage1(View v) { Intent myIntent = new Intent(v.getContext(),Page1.class); startActivity(myIntent); 終了(); }

add counter.cancel(); にメソッドを記述します。そのメソッドで、そのメソッドを呼び出します...

于 2012-06-30T06:08:55.590 に答える
0
public class TimerActivity extends Activity{

EditText e1;
MyCount counter;
Long s1;
/** Called when the activity is first created. */ 
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    e1=(EditText)findViewById(R.id.editText1);
    counter= new MyCount(5000,1000);
    counter.start();
}
public void asdf(View v)
{
    switch(v.getId())
    {
        case R.id.button1:         counter.cancel();
        break;
        case R.id.button2:         counter= new MyCount(s1,1000);
        counter.start();
    }
}
public class MyCount extends CountDownTimer
{
    public MyCount(long millisInFuture, long countDownInterval)
    {
        super(millisInFuture, countDownInterval);
    }
    @Override     public void onFinish()
    {
        e1.setText("DONE");
    }
    @Override     public void onTick(long millisUntilFinished)
    {
        s1=millisUntilFinished;
        e1.setText("left:"+millisUntilFinished/1000);
    }
}

}

于 2012-06-30T06:13:55.770 に答える