I am working in an Wedding App where I am maintaining a ListView of feeds.
The First element of my Feed Screen ListView is having a TIMER for the CURRENT DATE to the WEDDING DATE.
As I have taken the TIMER
in a ListView
, it getting hard to update the text of the TextView
in onTick()
method.
Wedding time is only visible in the first element of the list view.
_time = new CountDownTimer(WeddingTimeinMiliSec, 5000) {
String showDate;
long subtractvalue = 1000;
Calendar currentTime = Calendar.getInstance();
public void onTick(long millisUntilFinished) {
long diff = Day.getTimeInMillis() - currentTime.getTimeInMillis();
diff-=subtractvalue;
StringBuffer text = new StringBuffer("");
if (diff > DAY) {
//showDate = showDate+""+(diff / DAY)+("days ");
final long dif = diff;
if(holder!=null && holder._dayRespTextView!=null){
runOnUiThread(new Runnable() {
@Override
public void run() {
holder._dayRespTextView.setText(String.valueOf((dif / DAY)));
}
});
}
text.append(diff / DAY).append(" days ");
diff %= DAY;
}
if (diff > HOUR) {
// showDate = showDate+""+(diff / HOUR)+("hours ");
final long dif = diff;
if(holder!=null && holder._hoursRespTextView!=null){
runOnUiThread(new Runnable() {
public void run() {
holder._hoursRespTextView.setText(String.valueOf((dif / HOUR)));
}
});
}
text.append(diff / HOUR).append(" hours ");
diff %= HOUR;
}
if (diff > MINUTE) {
// showDate = showDate+""+(diff / MINUTE)+("minutes ");
final long dif = diff;
if(holder!=null && holder._minRespTextView!=null){
runOnUiThread(new Runnable() {
public void run() {
holder._minRespTextView.setText(String.valueOf((dif / MINUTE)));
}
});
}
text.append(diff / MINUTE).append(" minutes ");
diff %= MINUTE;
}
if (diff > SECOND) {
// showDate = showDate+""+(diff / SECOND)+("seconds ");
final long dif = diff;
if(holder!=null && holder._secRespTextView!=null){
runOnUiThread(new Runnable() {
public void run() {
holder._secRespTextView.setText(String.valueOf((dif / SECOND)));
}
});
}
text.append(diff / SECOND).append(" seconds ");
diff %= SECOND;
}
/*_tvTime.setText(""+WeddingTime);*/
showDate="";
subtractvalue+=1000;
notifyDataSetChanged();
}
public void onFinish() {
}
}.start();
This is my CountDownTimer code that I am using inside the CONSTRUCTOR of my ListView ADAPTER.
How can I update the text of the TextViews in the ListView's first element on onTick event. Please suggest me.
try this..
/**
* ADDING HEADER LAYOUT TO THE LISTVIEW
*/
View headerView = ((LayoutInflater)PostScreen.this.getSystemService(PostScreen.this.LAYOUT_INFLATER_SERVICE)).
inflate(R.layout.header_layout, null, false);
textview = (TextView)headerView.findViewById(R.id.countdown_tv);
_time = new CountDownTimer(WeddingTimeinMiliSec, 5000) {
String showDate;
long subtractvalue = 1000;
Calendar currentTime = Calendar.getInstance();
public void onTick(long millisUntilFinished) {
long diff = Day.getTimeInMillis() - currentTime.getTimeInMillis();
diff-=subtractvalue;
StringBuffer text = new StringBuffer("");
if (diff > DAY) {
//showDate = showDate+""+(diff / DAY)+("days ");
final long dif = diff;
dayThread = String.valueOf((dif / DAY));
text.append(diff / DAY).append(" days ");
diff %= DAY;
}
if (diff > HOUR) {
final long dif = diff;
hoursThread = String.valueOf((dif / HOUR));
text.append(diff / HOUR).append(" hours ");
diff %= HOUR;
}
if (diff > MINUTE) {
final long dif = diff;
minThread = String.valueOf((dif / MINUTE));
text.append(diff / MINUTE).append(" minutes ");
diff %= MINUTE;
}
if (diff > SECOND) {
final long dif = diff;
secThread = String.valueOf((dif / SECOND));
text.append(diff / SECOND).append(" seconds ");
diff %= SECOND;
}
showDate="";
subtractvalue+=1000;
String dateText = "<font color="+countDown_TextColor+">"+dayThread+
" DIAS </font> <font color="+countDown_TextColor+">"+hoursThread+
" HOURAS </font><font color="+countDown_TextColor+">"+minThread+" MIN</font>" +
"<font color="+countDown_TextColor+">"+secThread+" MIN</font>";
textview.setText(Html.fromHtml(dateText));
}
public void onFinish() {
}
}.start();