2017-07-26 8 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

は動作しますが、私は日付を使用してカウントダウンを探しています。 –

関連する問題