2013-04-06 46 views
1

我試圖在另一個線程運行時不能點擊ImageView。然後當線程完成時,再次返回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。

有人知道最新情況嗎?

Thx u!

+0

嘗試imageView.setOnClickListener(null); insdie run方法。一旦運行方法完成,然後添加偵聽器。 – kumar 2013-04-06 10:49:02

+0

你應該使用asynctask而不是線程。 正如答案中所述,您應該使用setOnclickListener而不是setOntouchListener。 new AsyncTask onPreExectute(){ imageView.setClickeable(false); } } .execute(); – vandzi 2013-04-06 11:28:36

回答

2

onTouch和onClick是不一樣的,所以當你設置onClickable虛假觸摸事件仍然被解僱。也許嘗試在setOnClickListener()中做你正在做的事

+0

您說得對,但我需要使用onTouch,因爲當您觸摸imageView(我的應用程序的要求)時,我的應用程序無法播放「點擊」。 – wildzic 2013-04-06 18:51:11

+0

在這種情況下,我會做什麼kumar說,但對於onTouchListener。基本上當你開始你的線程時將它設置爲false,如果我明白你想要做什麼。你也可以使用var或其他東西來跟蹤它是否應該被禁用。 – sgarman 2013-04-07 06:57:54

0

你應該使用asynctask而不是線程。 正如答案中所述,您應該使用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(); 
+0

我改變了它,但它仍然無法正常工作。它看起來像是保持點擊,然後在onPostExecute執行時直接運行它們(然後執行imageView.setOnclickListener(...))。 – wildzic 2013-04-06 18:58:59