インタフェースinterface探索-View.OnClickListerを例に
C++と比較して、Javaにはクラスのマルチ継承をサポートしないという大きな変更があります.ただし、Javaはインタフェース(interface)を提供し、1つのクラスで複数のインタフェースを実現することができます.
ゲーム設定に似ています.クラスを継承するのは、ヒーローを選択することです.ヒーロー自体にはいくつかの設定とスキルがあります.インタフェースを実現することは、英雄に異なる装備を装着し、英雄をより豊かにし、勇敢に戦うことだ.
アンドロイドの開発では、Activityでボタンを傍受するクリックイベントがよく発生します.
Android.view.View.OnClickListener,Googleの解釈:
Interface definition for a callback to be invoked when a view is clicked.
この本官定義のインタフェースで、Viewクラスがクリックされるとトリガーされます.次に、Viewクラスでどのように定義されているかを見てみましょう.
実はこれもインタフェースの特徴で、1つの関数を宣言して、この関数をインタフェースを実現するクラスに渡して実現します.
次に、ViewクラスでonClick(View v)が呼び出されていることを発見しました.
performClick()は,コールバックインタフェースだけでなく,再生音効果,クリック効果の表示などの操作も行っている.一方、onClick()を呼び出したcallOnClick()はコールバック関数のみを実行します.
ViewはデフォルトでperformClick()を実行します.
performClick()は、Viewクラスで複数回呼び出されます.
一度はスクリーンイベントインタフェースを実現する関数である.
1回はキーボードイベントインタフェースを実現する関数である.
もう1回はp e r f o m e c e s i b i t y ActionInternal(int action,Bundle arguments)で、この関数はViewにおけるAccessibilityDelegateクラスの1つの関数であり、主にViewの様々な機能と応答のAccessibility近接性を処理するために使用される.
OnClickListenerに戻り、Activityでこのインタフェースを実装する必要があります.
このコードはとても重要で、それは相対的にbtn_testは登録され、クリック傍受インタフェースが登録されていますが、このインタフェースはどのように実現されていますか?thisは現在のActivityを指し、その年にActivityが実現したインタフェース関数に従って操作することを意味します.
Activityでインタフェース(implements OnClickListener)を実装する必要のない別の実装方法もある.
2つの方法は効果が似ていて、任君が選択します.
ゲーム設定に似ています.クラスを継承するのは、ヒーローを選択することです.ヒーロー自体にはいくつかの設定とスキルがあります.インタフェースを実現することは、英雄に異なる装備を装着し、英雄をより豊かにし、勇敢に戦うことだ.
アンドロイドの開発では、Activityでボタンを傍受するクリックイベントがよく発生します.
public class TestActivity extends Activity implements OnClickListener{
……
}
のOnClickListenerはAndroid.view.View.OnClickListener,Googleの解釈:
Interface definition for a callback to be invoked when a view is clicked.
この本官定義のインタフェースで、Viewクラスがクリックされるとトリガーされます.次に、Viewクラスでどのように定義されているかを見てみましょう.
/**
* Interface definition for a callback to be invoked when a view is clicked.
*/
public interface OnClickListener {
/**
* Called when a view has been clicked.
*
* @param v The view that was clicked.
*/
void onClick(View v);
}
関数宣言以外に何もないことがわかりました.実はこれもインタフェースの特徴で、1つの関数を宣言して、この関数をインタフェースを実現するクラスに渡して実現します.
次に、ViewクラスでonClick(View v)が呼び出されていることを発見しました.
public boolean performClick() {
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);//
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnClickListener != null) {
playSoundEffect(SoundEffectConstants.CLICK);//
li.mOnClickListener.onClick(this);// onClick,this view
return true;
}
return false;
}
ListenerInfoはViewで定義されたクラスで、メンバー変数はmOnClickListenerやmOnLongClickListenerなど、さまざまなリスニングインタフェースです.performClick()は,コールバックインタフェースだけでなく,再生音効果,クリック効果の表示などの操作も行っている.一方、onClick()を呼び出したcallOnClick()はコールバック関数のみを実行します.
ViewはデフォルトでperformClick()を実行します.
performClick()は、Viewクラスで複数回呼び出されます.
一度はスクリーンイベントインタフェースを実現する関数である.
1回はキーボードイベントインタフェースを実現する関数である.
もう1回はp e r f o m e c e s i b i t y ActionInternal(int action,Bundle arguments)で、この関数はViewにおけるAccessibilityDelegateクラスの1つの関数であり、主にViewの様々な機能と応答のAccessibility近接性を処理するために使用される.
OnClickListenerに戻り、Activityでこのインタフェースを実装する必要があります.
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_test:
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
同時に忘れないでください. btn_test.setOnClickListener(this);
このコードはとても重要で、それは相対的にbtn_testは登録され、クリック傍受インタフェースが登録されていますが、このインタフェースはどのように実現されていますか?thisは現在のActivityを指し、その年にActivityが実現したインタフェース関数に従って操作することを意味します.
Activityでインタフェース(implements OnClickListener)を実装する必要のない別の実装方法もある.
btn_test = (Button)findViewById(R.id.btn_test);
btn_test.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show();
}
});
2つの方法は効果が似ていて、任君が選択します.