2017-07-26 20 views
0

下面是当我运行应用程序时,我的倒数计时器显示在文本视图中的代码。但是,当我运行它时,它不会出现。我正在尝试创建倒数计时器,其中包含事件的日,时,分和秒?

private TextView countdowndisplay; 
private Handler handler; 
private Runnable runnable; 

countdowndisplay = (TextView) view.findViewById(R.id.countdowntv); 

     countDownStart(); 



public void countDownStart() { 
     handler = new Handler(); 
     runnable = new Runnable() { 
      @RequiresApi(api = Build.VERSION_CODES.N) 
      @Override 
      public void run() { 
       handler.postDelayed(this, 1000); 
       try { 
        SimpleDateFormat dateFormat = null; 
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
         dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
        } else { 
         //Set the optional Date format here for Devices Running ANDROID VERSION BELOW N 
         dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
        } 
// Please here set your event date//YYYY-MM-DD 
        Date futureDate = dateFormat.parse("2017-09-23"); 
        Date currentDate = new Date(); 
        if (!currentDate.after(futureDate)) { 
         long diff = futureDate.getTime() 
           - currentDate.getTime(); 
         long days = diff/(24 * 60 * 60 * 1000); 
         diff -= days * (24 * 60 * 60 * 1000); 
         long hours = diff/(60 * 60 * 1000); 
         diff -= hours * (60 * 60 * 1000); 
         long minutes = diff/(60 * 1000); 
         diff -= minutes * (60 * 1000); 
         long seconds = diff/1000; 
         countdowndisplay.setText("" + String.format("%02d", days, hours, minutes, seconds)); 

        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     handler.postDelayed(runnable, 1 * 1000); 

    } 

下面是我对textView所用的XML进行显示的地方。

<TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/nextdrifttv" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:id="@+id/countdowntv"/> 

回答

0

我会做这个不同的方式,但是这个工程使用你的代码 - 安卓。

package com.example.coundown.countdownapp; 

import android.os.Build; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.annotation.RequiresApi; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.TextView; 

import java.text.SimpleDateFormat; 
import java.util.Date; 

public class MainActivity extends AppCompatActivity { 
    private TextView countdowndisplay; 
    private Handler handler; 
    private Runnable runnable; 

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

     countdowndisplay = (TextView) findViewById(R.id.coundowntimer); 

     countDownStart(); 

    } 

    public void countDownStart() { 
     handler = new Handler(); 
     runnable = new Runnable() { 
      @RequiresApi(api = Build.VERSION_CODES.N) 
      @Override 
      public void run() { 
       handler.postDelayed(this, 1000); 
       try { 
        SimpleDateFormat dateFormat = null; 
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
         dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
        } else { 
         //Set the optional Date format here for Devices Running ANDROID VERSION BELOW N 
         dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
        } 
// Please here set your event date//YYYY-MM-DD 
        Date futureDate = dateFormat.parse("2017-09-23"); 
        Date currentDate = new Date(); 
        if (!currentDate.after(futureDate)) { 
         long diff = futureDate.getTime() - currentDate.getTime(); 
         long days = diff/(24 * 60 * 60 * 1000); 
         diff -= days * (24 * 60 * 60 * 1000); 
         long hours = diff/(60 * 60 * 1000); 
         diff -= hours * (60 * 60 * 1000); 
         long minutes = diff/(60 * 1000); 
         diff -= minutes * (60 * 1000); 
         long seconds = diff/1000; 
         if (countdowndisplay != null) 
          countdowndisplay.setText(String.valueOf(days) + " days \n" + String.valueOf(hours) + " hours \n " + String.valueOf(minutes) + " minutes \n" + String.valueOf(seconds)+ " seconds"); 

        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 
     handler.postDelayed(runnable, 1 * 1000); 

    } 


} 
+0

所以它工作?任何想法为什么它不出现在我的文本视图? –

0

试试这个。您的问题是从可运行的更新UI。

public class MainActivity extends AppCompatActivity { 
    TextView countdowndisplay; 
    int count=0; 
    Handler handler = new Handler(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     countdowndisplay = (TextView) findViewById(R.id.mainText); 
     countdowndisplay.setText("really"); 
     countDownStart(); 

    } 
    void countDownStart(){ 
     //Post handler after 1 second. 
     handler.postDelayed(runnable, 1000); 
    } 


    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      count++; 
      handler.postDelayed(runnable, 1000); 
      ///**Update your UI from here**/// 
      countdowndisplay.setText(count+" Second"); 
     } 
    }; 
} 
+0

的作品,但我期待倒计时使用日期。 –

相关问题