【发布时间】:2015-09-02 12:18:15
【问题描述】:
我有一个包含多个片段和一个管理它们的活动的应用程序。为了避免片段之间的耦合,所有交互和更改都经过活动 - 但这是我的问题 - 在以下场景中我得到循环继承编译时错误:
简而言之:
class A extends Z implements B.listenerB, C.listenerC // cyclic inheritance involving A
class B extends Y implements A.listenerA //cyclic inheritance involving B
class C extends Y implements A.listenerA // cyclic inheritance involving A
长篇大论:
public class Fragment1 extends Fragment implements Activity1.onCustomEventListenerActivity {
onCustomEventListenerFrag1 listener1;
public interface onCustomEventListenerFrag1{
void onCustomEventinFrag1();
}
public void someAction(){
if (successful)
listener1.onCustomEvent(); //notify the activity of success
}
@Override
public void onCustomEvent(){
//respond to change from activity
}
}
这是我的示例活动:
public class Activity1 extends FragmentActivity implements Fragment1.onCustomEventListenerFrag1, Fragment2.onCustomEventListenerFrag2{
//Listens to events in the Activity
onCustomEventListenerActivity mListener;
public interface onCustomEventListenerActivity{
void onCustomEvent();
}
@Override
public void onCustomEventinFrag1(){
// notify Frag2
mListener.onCustomEvent();
}
@Override
public void onCustomEventinFrag2(){
// some code
}
public void someAction(){
if (successful)
mListener.onCustomEvent();
}
}
还有我的另一个片段:
public class Fragment2 extends Fragment implements Activity1.onCustomEventListenerActivity {
//Listens to some event in Frag2
onCustomEventListenerFrag2 listener2;
public interface onCustomEventListenerFrag2{
void onCustomEventinFrag2();
}
//Said event
public void someAction(){
if (successful)
listener2.onCustomEventinFrag2(); //notify the activity of success
}
//Responding to an event in the activity
@Override
public void onCustomEvent(){
//change something in the fragment
}
}
如何在保持片段之间松散耦合的同时避免此错误?例如,我可以将所有接口包装在一个类中并使每个类都实现所需的接口(如果可以,如何实现)?我见过其他循环耦合的例子,但我的理解似乎不是这样。
编辑:我想我明白了为什么会出现错误,但仍然 - 从某个类实现接口与继承所述类相同吗?
谢谢!
【问题讨论】:
-
将接口解压到自己的接口文件中
标签: java android-fragments interface callback event-listener