如何调用两个不同类的方法有共同之处?

时间:2017-01-17 08:48:53

标签: android

我的问题是一个设计问题。我有两个自定义片段CustomFrag1CustomFrag2。这两个片段都有一个方法swapCursor

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更新了适配器,我希望CustomFrag1CustomeFrag2中交换光标。如果已从swapCurosr实例化了适配器,我希望CustomFrag2MyAdapter mAdapter = new MyAdapter(this); 中交换光标。

是否可以传入片段的实例...

swapCursor

...并以某种方式用一个将swapCursor定义为方法的泛型变量表示该实例?如果没有,我可以使用什么策略?接口?泛型?什么?

修改

我尝试继承ul { display: flex; list-style: none; flex-direction: column; flex-wrap: wrap; height: 400px; } li { flex-basis: 25%; } ,但这只会将光标换出父节点而不是子节点。

2 个答案:

答案 0 :(得分:1)

swapCursor首先不应该是静态的,因为静态方法没有继承。

您可以创建一个具有方法swapCursor的接口(SwappableCursor作为名称提示),然后您的所有片段都可以实现此接口。这样你就必须实现swapCursor。

在MyAdapter的构造函数中,您可以添加一个具有接口类型的参数(SwappableCursor)。您将能够调用swapCursor方法。

答案 1 :(得分:0)

使用接口。

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

你的片段需要实现SwapFrag:

public class CustomFrag1 extends Fragment implements SwapFrag

并且还需要实现swapCursor方法。

@Override
public static void swapCursor(final Cursor cursor, Activity ctx) {
  ...
}