搜索關於這個具體問題的詳細信息後,我在這裏嘗試問某人是否有解決方案..Android的 - 問題與線程,監聽和倒計時
我試圖開發一個Android應用程序至極目前一些事件在今天與事件日期之間的倒數計時器的列表視圖中。
我已經在列表視圖中放置了一個「onItemClickListener」,以便詢問用戶他是否想將事件添加到他的列表中。
這是倒計時代碼:
while (countdownActive) {
countdownThread = new Thread(new Runnable() {
@Override
public synchronized void run() {
try {
this.wait(300);
handler.sendEmptyMessage(3);
} catch (InterruptedException e) {
Log.d("CKUne", e.getMessage());
}
}
});
countdownThread.start();
問題是,當我點擊一個項目,對話框並不總是顯示。有時它是(可能是因爲主線程有焦點),有時它不是(當countDown線程有焦點時)。
希望你有解決方案來阻止另一個線程。
謝謝
@Geo:這是對話框的機制:)
eventsListView.setOnItemClickListener(新OnItemClickListener({
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position,
long id) {
ckPosition = position;
new addCKTask().execute(null , null , null);
}
});
的addCKTask:
private class addCKTask extends AsyncTask<URL, Integer, Long> {
@Override
protected Long doInBackground(URL... params) {
Log.d("CKUne" , "itemclick");
handler.sendEmptyMessage(5);
handler.sendEmptyMessage(4);
handler.sendEmptyMessage(2);
return null;
}
}
然後處理程序:
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case 1 :
findViewById(R.id.loadCategoriesProgress).setVisibility(View.VISIBLE);
title.setText(categoriesName[indexCategorie].getLibelleCategorie());
break;
case 2 :
eventsListView.setAdapter(adapter);
countdownActive = true;
cdTask = new startCountDown();
cdTask.execute(null, null, null);
findViewById(R.id.loadCategoriesProgress).setVisibility(View.INVISIBLE);
break;
case 3 :
Thread.currentThread().interrupt();
adapter.notifyDataSetChanged();
break;
case 4 :
countdownThread.interrupt();
stopCountDown();
AlertDialog.Builder loginAlert = new AlertDialog.Builder(CKALaUne.this);
loginAlert.setMessage("Voulez-vous ajouter " + events.get(ckPosition).getNomCK() + "à votre liste ?");
loginAlert.setPositiveButton("Ajouter", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
chronokifWebServices.AddToMyChronokifs(CKALaUne.this.getIntent().getExtras().getString("pseudonyme"), CKALaUne.this.getIntent().getExtras().getString("password"), (events.get(ckPosition).getIdCK() + ""));
}
});
loginAlert.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
loginAlert.show();
break;
case 5 :
stopCountDown();
break;
}
}
};
在開始的時候,我只用線程和處理程序,但由於錯誤的結果,我試過的AsyncTask,但它給出了相同的結果:當我點擊,有一個機會,點擊不工作,並有機會它的工作原理。
添加您在onItemClickListener()中使用的代碼以使對話框出現 – Geobits 2011-05-30 12:02:13