在辅助线程运行时,ImageView无法单击

时间:2013-04-06 10:31:45

标签: android

我正在尝试在另一个线程运行时执行不可单击的ImageView。然后,当线程完成时,再次返回ImageView可点击状态。

这样的事情:

@Override
protected void onCreate(Bundle savedInstanceState) {

   ...    
   imageView.setClickeable(false); // or setEnabled = false

   new Thread(){
      public void run(){
         anotherClass.secondClassMethod();
      }
   }.start();

   imageView.setOnTouchListener(new View.OnTouchListener() {            
      @Override
      public boolean onTouch(View v, MotionEvent event) {
         ...
      }
    });
}


private anotherClassCallback callback = new anotherClassCallback(){

   @Override
   public void hasFinished(){
      imageView.setClickable(true); // or setEnabled = true
   }
};

但它实际上不起作用,因为,例如,如果我在线程运行时在imageView上单击3次,当hasFinished方法执行时,它看起来像是保持我的3次点击然后直接运行3 onTouch。

有人知道发生了什么事吗?

你好!

2 个答案:

答案 0 :(得分:2)

onTouch和onClick不相同,因此当您设置onClickable时,仍会触发错误触摸事件。也许尝试在setOnClickListener()

中做你正在做的事情

答案 1 :(得分:0)

你应该使用asynctask而不是thread。 如下面的答案中所提到的,你应该使用setOnclickListener而不是setOntouchListener。

new AsyncTask<Void,Void,Void>(){
    onPreExectute(){
         imageView.setClickeable(false);
         imageView.setOnclickListener(null);
    }

    doInBackround(){

    }

    onPostExecute(){
         imageView.setClickeable(true);
         imageView.setOnclickListener(new OnclickListener(){
         onClick(View v){

         }
         });
    }


}.execute();