2012-01-09 14 views
2

私は"ヘッダ"を3つのリストの先頭に置いています。これには、単純な読み取り更新更新&リストを編集するための削除ボタンが含まれています。は、Androidで継承を正しく使用しています

どのように私はヘッダーをサブクラスに取り掛かる必要がありますので、私はTaskHeader、ProjectHeader、ClientsHeader(サブクラス)でリスナーを上書きすることができます

レイアウト、ボタン作成、割り当てなどとして見ては...すべて同じで行うことができますimplementaionとリスナーの割り当てだけを特定のサブクラスに任せることができます。

示唆溶液で更新

インタフェース

import android.view.View.OnClickListener; 

public interface AttachClickListeners { 

void attachCreateListener(OnClickListener l); 
void attachReadListener(OnClickListener l); 
void attachUpdateListener(OnClickListener l); 
void attachDeleteListener(OnClickListener l); 

}

ヘッダ

public class Header extends LinearLayout implements AttachClickListeners { 
/* removed for shortness */ 
public void attachCreateListener(OnClickListener listener) { 
    insertBtn.setOnClickListener(listener); 
} 

public void attachReadListener(OnClickListener listener) { 
    selectBtn.setOnClickListener(listener); 
} 

public void attachUpdateListener(OnClickListener listener) { 
    updateBtn.setOnClickListener(listener); 
} 

public void attachDeleteListener(OnClickListener listener) { 
    deleteBtn.setOnClickListener(listener); 
} 

私はヘッダーを作成するたびに、@elijahで提案されているように別のリスナーオブジェクトを渡します。

答えて

2

UIと動作を共有できる場合は、ヘッダーをサブクラス化する必要はありません。

代わりに、応答したいイベントのリスナークラスのインタフェース定義を作成します。たとえば、Createボタンに対する応答が異なる場合は、onCreateClickedListenerインターフェイスを定義し、共有ヘッダーオブジェクトが存在するすべてのビューに対してそのインターフェイスの特定のインスタンスを作成します。リスナーを登録する必要があります。以下のようなもの:

createClickedListener = new onCreateClickedListener() { 
    @Override 
    public void onClick() { ... } 
}; 

header.setOnCreateClickedListener(createClickedListener); 

Thisチュートリアルでは、深さのトピックをカバーしています。

+0

おかげでリンクが面白かったです。私の解決策で質問を編集して、インターフェイスソリューションの利点を説明できるかもしれません。私は抽象クラスと同様にして、抽象メソッドを提供しました。つまり、サブクラスがオーバーライドしていたgetListener()です。 – Luke

+1

私はあなたがここで何を求めているのかは実際は分かりません。質問を編集すると、私はそれを見てうれしいです。インターフェイスのソリューションの利点は、ヘッダーオブジェクトをサブクラス化する必要がないことです。Androidフレームワークを見れば、それは「完了しました」...そうでなければ、すべてのボタンなどをサブクラス化する必要があります私たちはそれが何をするのかを見ていました。 – elijah

+0

私は達成しようとしていることを説明するために質問を更新しました。 – Luke

関連する問題