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(new 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);

                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\",int id) {
                        dialog.cancel();
                    }
                });

                loginAlert.show();

                break;
            case 5 :
                stopCountDown();
                break;
            }
        }
    };
刚开始时,我只使用线程和处理程序,但是由于错误的结果,我尝试了AsyncTask,但给出了相同的结果:单击时,单击不起作用的可能性也很大。     

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)