2016-10-12 11 views
0

特定の条件に基づいてボタンクリックリスナの動作を動的に変更する動作を実装しようとしています。 は、これまでのところ私は、コードの下にしようとしている:ボタンのリスナーインスタンスをアンドロイドで動的にクリックする方法

Button button = (Button) findViewById(R.id.mybutton); 
button.setOnClickListener(new View.OnClickListener() { 
    int i =0; 
    @Override 
    public void onClick(View v) { 
     if(i>0){ 
      button.setOnClickListener(null); 
      buttonsetOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // do another function 
       } 
      }); 
     } 
     i++; 
    } 
}); 

私はsetOnClickListenerにnullを設定し、同じボタンに新しいsetOnClickListenerを割り当てるが、新しい割り当てのリスナーが動作していないと、まだその古いsetOnClickListenerを実行しています。

答えて

0

は、例えば、そのonclicklistenerの新しいインスタンスを作成onclicklistener:

final View.OnClickListener listener3 = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //do stuff 
     } 
    }; 


    final View.OnClickListener listener2 = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      btnNext.setOnClickListener(listener3); 
      // do stuff 
     } 
    }; 


    View.OnClickListener listener1 = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      btnNext.setOnClickListener(listener2); 
      //do stuff 
     } 
    }; 



    btnNext.setOnClickListener(listener1); 
0

新しいリスナーを設定する代わりに、クリックリスナー内にif-elseロジックを記述することができます。

boolean imageUploaded = false; 

button.setOnClickListener(new View.OnClickListener() { 
    int i =0; 
    @Override 
    public void onClick(View v) { 
     if(imageUploaded){ 
      //do some stuff. 
     } else { 
      //do other stuff 
     } 
     i++; 
    }); 
} 

と画像がアップロードされたときだけボタンをクリックする

imageUploaded = true; 
+0

2つの条件の最初のものが存在する画像をアップロードすることで、画像が既にアップロードされた画像をプレビューし、その後アップロードされる場合、別のものです。イメージがすでにサーバーに存在する場合は、これも処理する必要があります。これをどう扱う? –

+0

ブールフラグが付いていますか? –

+0

@FerozSiddiquiが答えを更新しました。お役に立てれば。返信ありがとう。 – yrazlik

0

毎回を設定し、最初のonClickListenerが呼び出され、int型の変数iが再作成されます。したがって、ゼロと等しくなります。その後、2番目のonClickリスナーに切り替わりません。おそらく、int変数をグローバルにする必要があります。それぞれについて

+0

私の質問は、私がiの価値に関係なく、リスナーを変えたかどうかです。新しいlistnerが割り当てられている場合は、最初にnullを設定してから新しいlisnterを割り当てるため、なぜ呼び出されないのですか。 –

+0

okですが、コードでわかるように、リスナーの変更はi> 0の場合にのみ起こります。 –

関連する問題