Androidのボタンリスニングイベント&カスタムコールバック関数


Androidのボタンリスニングイベント&カスタムコールバック関数
コードを书く时いつもコールバック関数を使って、ずっとどのように使うかを覚えていて、よく理解していません.今日は决心して资料を调べて普段书いたコードを加えて、まずButtonの傍受メカニズムを整理します:androidはいくつかのimageView、Buttonなどのコンポーネントに対して傍受メカニズムを设けて、私达がコンポーネントに対してクリックする时、コールバックonClick方法:
    //         
    Button Btn1 = (Button)findViewById(R.id.button1);//          
    Btn1.setOnClickListener(new Button.OnClickListener(){//        
        public void onClick(View v) {    
            String strTmp = "  Button01";    
            Ev1.setText(strTmp);    
        }    

    });    
    //         
    Button Btn2 = (Button) findViewById(R.id.button2);//          
    Btn2.setOnClickListener(listener);//        

}  
     //    implements View.OnClickListener,  onClick  
     @override
     public void onClick(View v){    
        String strTmp="  Button02";    
        Ev1.setText(strTmp);    
    }    

次に、カスタムコールバック関数がどのように実現されるかを見てみましょう.私のコード経験では、コールバックが最も多く使われているのは2つあります.1.ビューのUIクラスをカスタマイズしてインタフェースを定義し、設定方法でインタフェースを呼び出し者に露出します.2.RecyclerViewの書き込み時に、各ローとして理解されているItemのコンポーネントをアダプタでリスニングするか、またはItem全体をリスニングします.次に、この2つの実装を見てみましょう.//第2の実装
private  OnCampaignClickListener mListener;
//    ,       ,           
public  interface OnCampaignClickListener{

    void onClick(View view,Campaign campaign);

}

//                 ,                  
public void setOnCampaignClickListener(OnCampaignClickListener listener){
    this.mListener = listener;
}


 imageViewBig.setOnClickListener(this);
 imageViewSmallTop.setOnClickListener(this);
 imageViewSmallBottom.setOnClickListener(this);  

      //                
    @Override
    public void onClick( View v) {
        anim(v);
    }

        //**           ,        ,      ,       **
      private void anim(final  View v){

          //  ObjectAnimator      
          ObjectAnimator animator = ObjectAnimator.ofFloat(v,"rotationX",0.0F,360.0F)
                  .setDuration(200);

          animator.addListener(new AnimatorListenerAdapter() {
              //         
              @Override
              public void onAnimationEnd(Animator animation) {
                  super.onAnimationEnd(animation);


                  HomeCampaign homeCampaign = mDatas.get(getLayoutPosition());
                  if(mListener !=null){

                      switch (v.getId()){

                          case  R.id.imgview_big:
                              mListener.onClick(v,homeCampaign.getCpOne());
                              break;

                          case  R.id.imgview_small_top:
                              mListener.onClick(v,homeCampaign.getCpTwo());
                              break;

                          case  R.id.imgview_small_bottom:
                              mListener.onClick(v,homeCampaign.getCpThree());
                              break;



                      }
                  }


              }
          });
          animator.start();

      }

}
**      **
**         ,       ,                      ,      **
 //         ,   WareListActivity
    mAdatper.setOnCampaignClickListener(new HomeCatgoryAdapter.OnCampaignClickListener() {
        @Override
        public void onClick(View view, Campaign campaign) {

            Intent intent = new Intent(getContext(), WareListActivity.class);
            // value   intent,key        
            intent.putExtra(Constants.COMPAINGAIN_ID,campaign.getId());

            startActivity(intent);



        }
    });

コールバックという概念をまとめると、コールバック関数とは、Aクラスに1つのインタフェースとそのインタフェースの抽象的な方法を定義する方法であるが、抽象的な方法は具体的に実現されず、Bクラスが実現する必要があり、Bクラスがこの方法を実現した後、自身はこの方法を呼び出すのではなく、Aクラスに渡し、Aクラスが呼び出すために、このメカニズムをコールバックと呼ぶ.最近プレッシャーが大きいので、最後に正のエネルギーを伝えて、努力して、黙って努力すれば、必ず成果があります!