2017-01-17 14 views
0

私の質問は設計上の質問です。私は2つのカスタムフラグメントCustomFrag1CustomFrag2を持っています。これらのフラグメントはいずれも方法がswapCursorです。2つの異なるクラスを共通の方法で呼び出す方法はありますか?

CustomFrag1

public class CustomFrag1 extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     // .... code 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // .... code 

     MyAdapter mAdapter = new MyAdapter(); 

     // .... code 
    } 

    public static void swapCursor(final Cursor cursor, Activity ctx){ 

     // .... code 
    } 

} 

CustomFrag2

public class CustomFrag1 extends Fragment { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     // .... code 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     // .... code 

     MyAdapter mAdapter = new MyAdapter(); 

     // .... code 
    } 

    public static void swapCursor(final Cursor cursor, Activity ctx){ 

     // .... code 
    } 

} 

私は各フラグメントのために別々のアダプタクラスを作成する必要はありません。私はしかし、アダプタクラスのswapCursorに電話したいと思います。アダプタがCustomeFrag1からインスタンス化されている場合はswapCurosrにカーソルを入れ替えてCustomFrag1に入れます。アダプタがCustomeFrag2からインスタンス化されている場合、swapCurosrCustomFrag2にカーソルを入れ替えたいと思っています。

それは...断片のインスタンスに

MyAdapter mAdapter = new MyAdapter(this); 

を渡す...何とかswapCursorがメソッドとして定義された一般的な変数とそのインスタンスを表現することは可能ですか?そうでない場合、私はどのような戦略をとることができますか?インターフェース?ジェネリック?何か?

編集私はswapCursorを継承しようとしたが、それは単に親とない子の上にカーソルをスワップアウトします。

+0

*私はswapCursorを継承しようとしましたが、カーソルを親子で置き換えてしまいました*、なぜですか? – Blackbelt

答えて

1

静的メソッドの継承がないため、swapCursorは最初は静的であってはいけません。

swapCursorメソッドを持つインターフェイス(名前ヒントとしてSwappableCursor)を作成すると、すべてのフラグメントがこのインターフェイスを実装できます。したがって、swapCursorを実装する必要があります。

MyAdapterのコンストラクタでは、インターフェイスのタイプ(SwappableCursor)を持つパラメータを追加できます。 swapCursorメソッドを呼び出すことができます。

+0

ありがとうございます。それが私が動向を追う戦略でした。静的メソッドを継承できないのはなぜですか? –

+0

これはおそらく助けるいくつかの答えです:http://stackoverflow.com/questions/2223386/why-doesnt-java-allow-overriding-of-static-methods最初の答えはかなり良いです。 – pcjuzer

0

インターフェイスを使用します。

public class CustomFrag1 extends Fragment implements SwapFrag

をしてもswapCursorメソッドを実装する必要があります。

public interface SwapFrag { 
    public swapCursor(final Cursor cursor, Activity ctx); 
} 

あなたのフラグメントはSwapFragを実装する必要があります。

関連する問題