我的问题是一个设计问题。我有两个自定义片段CustomFrag1
和CustomFrag2
。这两个片段都有一个方法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
更新了适配器,我希望CustomFrag1
在CustomeFrag2
中交换光标。如果已从swapCurosr
实例化了适配器,我希望CustomFrag2
在MyAdapter mAdapter = new MyAdapter(this);
中交换光标。
是否可以传入片段的实例...
swapCursor
...并以某种方式用一个将swapCursor
定义为方法的泛型变量表示该实例?如果没有,我可以使用什么策略?接口?泛型?什么?
修改
我尝试继承ul {
display: flex;
list-style: none;
flex-direction: column;
flex-wrap: wrap;
height: 400px;
}
li {
flex-basis: 25%;
}
,但这只会将光标换出父节点而不是子节点。
答案 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) {
...
}