После поиска дополнительной информации об этой конкретной проблеме, я пытаюсь спросить здесь, есть ли у кого-то решение ..
Я пытаюсь разработать приложение для 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 (new OnItemClickListener () {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position,
long id) {
ckPosition = position;
new addCKTask().execute(null , null , null);
}
});
Задача addCK:
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, но он дает тот же результат: когда я нажимаю, есть шанс, что щелчок не работает, и шанс, что он работает .