1

別のスレッドの実行中にクリックできない 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 がすぐに実行されるように見えるためです。

誰かが何が起こっているか知っていますか?

ありがとう!

4

2 に答える 2

2

onTouch と onClick は同じではないため、onClickable を設定しても false タッチ イベントが発生します。setOnClickListener() で行っていることを試してみてください

于 2013-04-06T10:54:39.257 に答える
0

スレッドの代わりに asynctask を使用する必要があります。以下の回答で述べたように、setOntouchListener の代わりに setOnclickListener を使用する必要があります。

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();
于 2013-04-06T11:35:36.837 に答える