2012-04-10 11 views
0

一定時間後に開始するアクティビティがあります。このアクティビティが開始されると、ユーザーは新しいタイマーを開始するボタンを押すことになっています。ボタンを押すまでのコードの実行

しかし、ユーザーがボタンを押さないと、ボタンが押されるまで5分ごとにトーストが表示されます。私はトーストを表示し、他のすべてがうまく機能しているため、コードを持って

startBreakButton = (Button) findViewById(R.id.startBreakButton); 
    startBreakButton.setOnClickListener(mStartListener); 

は、私は、ボタンのリスナーを持っています。

私はボタンをクリックする前に実行したいコードをどこに置くべきか分かりません。 mStartListenerコード内、またはonCreateメソッド内などどこか他の場所?

UPDATE

public class BreakActivity extends Activity { 

Button startBreakButton; // button to start the break timer 
Boolean clicked= false; 
CountDownTimer counter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.breakscreen); // sets layout to breakscreen.xml 

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

    startBreakButton = (Button) findViewById(R.id.startBreakButton); 
    startBreakButton.setOnClickListener(mStartListener); 

    View.OnClickListener mStartListener = new OnClickListener() { 

clicked=true; 
//other listener code 
}; 

public class MyCount extends CountDownTimer{ 
    public MyCount(long millisInFuture, long countDownInterval) { 
    super(millisInFuture, countDownInterval); 
    } 
    @Override 
    public void onFinish() { 
     if(clicked==false){ 
     Toast.makeText(getApplicationContext(), "TAKE A BREAK", Toast.LENGTH_LONG).show(); 
     counter= new MyCount(5000,1000); 
    counter.start(); 
     } 

    } 
    @Override 
    public void onTick(long millisUntilFinished) { 
     long s1 = millisUntilFinished; 

    } 
    } 
    }; 

EDIT - 溶液の上には、それが偽=クリックされていない、偽==クリックするために必要な、機能していません!

答えて

1

次のように試してみてください。..

OnCreate関数acountdowntimerを作成中...

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

MyCountクラス..

public class MyCount extends CountDownTimer{ 
public MyCount(long millisInFuture, long countDownInterval) { 
super(millisInFuture, countDownInterval); 
} 
@Override 
public void onFinish() { 
    if(clicked=false){ 
    //put the toast here 
    counter= new MyCount(300000,1000); 
counter.start(); 
    } 

} 
@Override 
public void onTick(long millisUntilFinished) { 
    s1=millisUntilFinished; 



} 
} 
} 

とstartBreakButtonのonclicklistenerでは

clicked=true; 
+0

返信いただきありがとうございます。私がこれを起こさせたい活動は、BreakActivityと呼ばれています。最初のコードスニペットを、このアクティビティのonCreateメソッドと、リスナの3番目のコードスニペットに入れますか? 2番目のコードスニペットでは、そのクラスを作成してBreakActivityを拡張する必要がありますか? – Rob

+0

あなたのアクティビティにクラスmyCountを作成します.. ..何も拡張する必要はありません。 – 5hssba

+0

これで、BreakActivityの最後にクラスmyCountを追加しました。しかし、クラスmyCountでは、変数counter、clickedおよびs1は定義されていません。 Startlistenerに追加したclicked = trueを変数に解決することができないため、どこかで間違っていました。( – Rob

0

AlarmManagerを使用して、今から5分間アラームを設定できます。

次に、ユーザーがボタンをクリックしていないことを確認し、トーストを表示して別のアラームを設定します。ユーザーがボタンをクリックした場合は、何もしないでください。

0

ボタンをクリックするかどうかを決定するフラグを保持します。 クリックされた場合は、そのフラグをtrueにします。 フラグがfalseの場合は、5分ごとにメソッドを呼び出し、ボタンを押すまでトーストします。 5分ごとにスケジュール方法を呼び出すことができます。

0
を置きます

よonClickListenerメソッドの中にトーストコードを入れておくべきです。ボタンが押されているかどうかにかかわらず、ボタンの状態を知るための条件があれば使用してください。うまくいけばいいと思います。

関連する問題