定时器三种EditTexts不能正常工作 [英] Timer in three EditTexts not working properly

查看:219
本文介绍了定时器三种EditTexts不能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经做了定时器应用在android.In应用有三个(不可编辑) 的EditText 按钮。当我preSS 按钮首次在1号计时器的EditText 开始,当我preSS它第二次在第1计时器的EditText 将停止,并在同一时间,第二个定时器的EditText 将被启动,当我再次preSS按钮,同样的事情也会有3 EdtiText 。现在这个code工作正常,但是当我preSS后退按钮并重新启动它,它停在第三次工作的EditText 。问题是有时3的EditText不正常的计时器(不显示)..我的code是如下:

I have made a Timer Application in android.In application there are three (uneditable)EditText and a Button.When i press Button first time the timer in 1st EditText will start ,when i press it 2nd time the timer in 1st EditText will stop and at the same time the timer in 2nd EditText will be start,when i again press button same thing will be happened with 3rd EdtiText.NOw this code is working properly but when i press back button and again start it,its stopped working in 3rd EditText.The problem is sometimes the timer in 3rd EditText is not working(not displayed)..my code is as below:

mainActivity.java

package com.example.timerdemo2;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;

import org.w3c.dom.Text;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
    EditText et1,et2,et3;
    TextView tv;
   public int i=0;
    long starttime = 0;
    long lasttime,lasttime1;
    final Handler handler = new Handler();
    Handler h2 = new Handler();
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            moveTaskToBack(true);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    Runnable run = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            long millis = System.currentTimeMillis() - starttime;
               int seconds = (int) (millis / 1000);
               int minutes = (seconds%3600)/60;
               int hours = seconds / 3600;
               seconds     = seconds % 60;

               et1.setText(String.format("%02d:%02d:%02d",hours, minutes, seconds));
     //          et2.setText(String.format("%02d:%02d:%02d",hours, minutes, seconds));
      //         et3.setText(String.format("%02d:%02d:%02d",hours, minutes, seconds));

               h2.postDelayed(this, 500);
        }
    };

    class firstTask extends TimerTask {

        public void run() {
            handler.sendEmptyMessage(0);
        }
};  

class secondTask extends TimerTask{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {

                // TODO Auto-generated method stub
                long millis = System.currentTimeMillis() - starttime;
                int seconds = (int)(millis/1000);
                int hours =seconds/3600;
                int minutes = (seconds % 3600)/60;
                seconds = seconds % 60;
                et2.setText(String.format("%02d:%02d:%02d", hours,minutes,seconds));

            }
        });
    }

}

class thirdTask extends TimerTask{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        MainActivity.this.runOnUiThread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub

                 long millis = System.currentTimeMillis() - starttime;
                 int seconds = (int)(millis/1000);
                 int hours =seconds/3600;
                 int minutes = (seconds % 3600)/60;
                 seconds = seconds % 60;

                 et3.setText(String.format("%02d:%02d:%02d", hours,minutes,seconds));
                 h2.postDelayed(this, 500);
            }
        });
    }

}
    Timer timer = new Timer();

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

        Bundle bundle = this.getIntent().getExtras();
        String title = bundle.getString("title");
        tv = (TextView)findViewById(R.id.projectTitle);
        tv.setText(title);

        et1= (EditText)findViewById(R.id.timeEdit1);
        et2= (EditText)findViewById(R.id.timeEdit2);
        et3= (EditText)findViewById(R.id.timeEdit3);
        Button b = (Button)findViewById(R.id.btn);
        b.setText("Start");
        b.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
        Button b =(Button)v;

        if(b.getText().equals("Stop")){
            timer.cancel();
            timer.purge();
            h2.removeCallbacks(run);
            Intent intent =new Intent(MainActivity.this,Timedetails.class);
            Bundle bundle =new Bundle();

            //Procedure for Showing time stamps on another page

            String a = et1.getText().toString();
            String b1 = et2.getText().toString();
            String c = et3.getText().toString();

            String t =  tv.getText().toString();
            intent.putExtra("titl1",t);
            startActivity(intent);

             SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
             format.setTimeZone(TimeZone.getTimeZone("UTC"));
           try{
               bundle.putString("t1", a);
                bundle.putString("t2", b1);
                bundle.putString("t3", c);
                 Date date1 = (Date) format.parse(a);
                 Date date2 = (Date) format.parse(b1);
                 Date date3 = (Date) format.parse(c);
                 //time difference in milliseconds
                 long timeDiff = date2.getTime() - date1.getTime(); 
                 long timeDiff2 = date3.getTime() - date2.getTime();
                 //new date object with time difference
                 Date diffDate = new Date(timeDiff); 

                Date diffDate2 = new Date(timeDiff2);
                 long timeDiffSecs = timeDiff/1000;
                 String timeDiffString = timeDiffSecs/3600+":"+
                                         (timeDiffSecs%3600)/60+":"+
                                         (timeDiffSecs%3600)%60;
                 long timeDiffSecs1 = timeDiff2/1000;
                 String timeDiffString1 = timeDiffSecs1/3600+":"+
                                         (timeDiffSecs1%3600)/60+":"+
                                         (timeDiffSecs1%3600)%60;
                 //formatted date string
                // String timeDiffString = format.format(diffDate); 
                 //System.out.println("Time Diff = "+ timeDiffString );
                 bundle.putString("t1", a);
                    bundle.putString("t2", b1);
                    bundle.putString("t3", c);
         bundle.putString("dif1", timeDiffString);
         bundle.putString("dif2", timeDiffString1);
           }
           catch(Exception e){
               e.printStackTrace();
           }


            intent.putExtras(bundle);
            startActivity(intent);
            b.setText("Next");

        }



        else if(b.getText().equals("Lap1")) 
        {

            timer.schedule(new secondTask(),0, 500);
            h2.removeCallbacks(run);
            b.setText("lap2");
        }
        else if(b.getText().equals("lap2")){

            timer.schedule(new thirdTask(), 0,500);
            h2.removeCallbacks(run);
            timer.cancel();
            timer.purge();
            b.setText("Stop");
        }
        else {
            starttime = System.currentTimeMillis();
            timer = new Timer();
            timer.schedule(new firstTask(), 0,500);
           // timer.schedule(new secondTask(),  0,500);
            //timer.schedule(new thirdTask(),  0,500);
            h2.postDelayed(run, 0);
            b.setText("Lap1");           
           //long lastdown = System.currentTimeMillis();
        }

        }
    });  
    }


}

MainActivity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/abs5"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/projectTitle"
       android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="top|center"
        android:layout_marginTop="5dp"
        android:text="Project Title"
        android:textColor="#CCCCCC"
        android:textSize= "40dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textStyle="bold"  />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:text="Timing Point1"
       android:textSize="20dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#CCCCCC" />

    <EditText
        android:id="@+id/timeEdit1"
        android:layout_width="172dp"
        android:layout_height="30dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:background="#FFFFFF"
        android:editable="false"
        android:filterTouchesWhenObscured="false"
        android:focusable="false" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" 

    android:layout_marginTop="10dp">

    <TextView

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Timing Point2"
        android:textColor="#CCCCCC"
        android:textSize="20dp"
        android:layout_marginTop="10dp"
         android:layout_marginLeft="5dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

     <EditText
         android:id="@+id/timeEdit2"
         android:layout_width="172dp"
        android:layout_height="30dp"
         android:layout_marginLeft="5dp"
         android:layout_marginTop="10dp"
           android:focusable="false"
        android:filterTouchesWhenObscured="false"
         android:background="#FFFFFF"
         android:editable="false" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"

    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:text="Timing Point3"
        android:textColor="#CCCCCC"
        android:textSize="20dp"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/timeEdit3"
        android:layout_width="172dp"
       android:layout_height="30dp"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="10dp"
        android:background="#FFFFFF"
        android:editable="false" >

        <requestFocus />
    </EditText>

    </LinearLayout>

 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginTop="10dp"
     android:layout_marginBottom="20dp"
     android:orientation="horizontal" >

     <Button
         android:id="@+id/btn"
         android:layout_width="129dp"
         android:layout_height="64dp"
         android:layout_marginBottom="10dp"
         android:layout_marginLeft="110dp"
         android:layout_marginTop="10dp"
         android:background="@drawable/aqa"
         android:textColor="#FFFFFF"
         android:textSize="30dp" />

 </LinearLayout>

</LinearLayout>

请帮我这个快...真的感谢你.....甲肝GUD TYM

Please help me for this as fast ...really thanking you.....hav a gud tym

推荐答案

看这code在LAP2处理程序:

Look at this code in your lap2 handler:

        timer.schedule(new thirdTask(), 0,500);
        h2.removeCallbacks(run);
        timer.cancel();
        timer.purge();
        b.setText("Stop");

您计划任务,并取消计时器随即

You schedule a task and cancel the timer immediately afterwards.

我建议你摆脱定时器,只使用 Handler.postDelayed()方法,因为你已经做了实时更新,并开始第一场的更新:

I would suggest that you get rid of the Timer and just use the Handler.postDelayed() method, as you have done already for the time updates and to start the update of the first field:

h2.postDelayed(run, 0);

使用相同的方法来启动第二和第三个字段更新。你并不需要在定时的TimerTask 实例都没有。

Use the same method to start the updates for second and third fields. You don't need the Timer and TimerTask instances at all.

另外,你为什么需要两个处理器(处理程序 H2 )?

Also, why do you need two handlers (handler, and h2)?

这篇关于定时器三种EditTexts不能正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆