ここから本文です

AndrodStudioについての質問です。 スタート、ストップのみのタイマーのアプリを...

飯田河人さん

2017/6/219:21:33

AndrodStudioについての質問です。
スタート、ストップのみのタイマーのアプリを作りたいのですが、うまくいきません。
スタートを押すと、アプリが停止してしまいます。

おそらく原因はonClickButton1の中身にあると思うのですが、原因がわかりません。
(android:onClick="onClick"はxmlの中で処理しています)

また、onClickButtonの中身を関係のない内容(ボタンの色変更など)に変えると、アプリは停止しません。

public class FirstActivity extends AppCompatActivity implements View.OnClickListener{
private TextView textView;
private Timer timer = null;
private int elapsedtime = 0;
android.os.Handler handler = new android.os.Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}

//ボタンを押されたときの処理//

private void onClickButton1() {
if(timer==null) {
textView.setText("0 s");
elapsedtime = 0;
timer = new Timer(true);
MyTimerTask myTimerTask = new MyTimerTask();
timer.schedule(myTimerTask, 1000, 1000);
}
}

private void onClickButton2() {
if(timer!=null) {
timer.cancel();
timer = null;
}
}

public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
onClickButton1();
break;

case R.id.button2:
onClickButton2();
break;
}
}

public class MyTimerTask extends TimerTask {
public void run() {
handler.post(new Runnable(){
public void run(){
elapsedtime++;
textView.setText(Integer.toString(elapsedtime) + "s");
}
});
}
}
}

閲覧数:
34
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

kei********さん

2017/6/302:01:35

textViewという変数に値を設定し忘れている、それだけじゃないですか?

textView = (TextView) findViewById(R.id.textView);

のようにして値を設定しておけば、動きそうではあります。

それから先の回答で指摘のあるandroid:onClickについてですが、これで指定したメソッドはView型の引数を取ります。

ドキュメント
https://developer.android.com/reference/android/widget/Button.html

implementsが余計なので除去するという点と、上記のTextViewの修正の2点で良いのではないかと思います。

ベストアンサー以外の回答

1〜1件/1件中

tri********さん

2017/6/301:10:27

レイアウト.xml中の android:onClick="onClick" を使うのなら,
implements View.OnClickListener は不要だし,
public void onClick(View v) { と引数ありのonClick()メソッドにはならない。

アクティビティに対して implements View.OnClickListener を指定して
public void onClick(View v) { と引数ありのonClick()メソッドで処理するなら,
レイアウト.xml中の android:onClick="onClick" は削除して,
次のように2つのButtonと1つのTextViewの扱いをJava内で指定することになります。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
textView = (TextView) findViewById(R.id.textView1);
}

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる