我是android新手。我正在創建一個競賽應用程序,其中包含一個包含該事件狀態的ListView
。無論是否開始。當前時間超過事件開始時間時應自動更新。如何根據當前時間和事件開始時間更新listItem的textview
我使用的是AsyncTask
,但它不是很準確。
@Override
public View getView(final int position, View view, ViewGroup parent) {
LayoutInflater scheduleInflater = LayoutInflater.from(getContext());
final Holder h;
if(view == null){
view = scheduleInflater.inflate(R.layout.custom_list , parent , false);
h = new Holder();
h.eventName=(TextView) view.findViewById(R.id.eventNameCustomList);
h.eventStatus=(TextView) view.findViewById(R.id.eventStatus);
h.leftTime = (TextView) view.findViewById(R.id.leftTime);
h.rightTime= (TextView) view.findViewById(R.id.rightTime);
view.setTag(h);
}else{
h = (Holder) view.getTag();
}
final data d = getItem(position);
h.eventName.setText(d.getEventName());
Date startDate= d.getStartDate();
Date endDate = d.getEndDate();
long stTime = startDate.getTime();
long now = System.currentTimeMillis();
if(now >= stTime) {h.eventStatus.setText(Html.fromHtml(startedText));}
else {h.eventStatus.setText(Html.fromHtml(upcomingText));}
h.eventStatus.setTag(String.valueOf(position)); // Setting Tag of each TextView to its position to avoid incorrect ayncTask update
new go(h.eventStatus).execute(d.getStartDate()); // starting a thread to update the Text view
return view;
}
public class go extends AsyncTask<Date, Void , Boolean> {
String path;
TextView status;
public go(TextView eventStatus){
this.status=eventStatus;
this.path=eventStatus.getTag().toString();
}
@Override
protected Boolean doInBackground(Date... params) {
Date startDate = params[0];
while(true){
long curTime = System.currentTimeMillis();
long startTime = startDate.getTime();
if (curTime >= startTime) {return true;}
}
}
@Override
protected void onPostExecute(Boolean b) {
if(!status.getTag().toString().equals(path)) return;
if(b!=null && status!=null){
if(b==true) status.setText(Html.fromHtml(startedText));
else status.setText(Html.fromHtml(upcomingText));
}else{
status.setText(Html.fromHtml(upcomingText));
}
}
}
static class Holder{
TextView eventName , eventStatus;
TextView leftTime, rightTime;
}
如何更新在當前時間超過開始時間TextView
來啓動。請幫助並提出更好的解決方案。
'其中包含event'的狀態做你的意思是listview顯示的是事件列表? '但它不是很準確'請在這裏定義準確。另外,櫃檯是否繼續滴答,例如20分鐘等等? – Sufian
Listview有許多事件,它在每個顯示狀態的項目中都有一個textview。狀態:即將到來或狀態:已啓動。 Asynctask讓我的應用程序更慢 – Arun