Val*_*a.V 3 java interface callback event-listener android-fragments
我有一个带有几个片段的应用程序和一个管理它们的活动.为了避免片段之间的耦合,所有交互和更改都会通过活动 - 但这是我的问题 - 我在以下场景中得到循环继承编译时错误:
简而言之:
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
Run Code Online (Sandbox Code Playgroud)
长:
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
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的示例活动:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
而我的另一篇片段:
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
}
}
Run Code Online (Sandbox Code Playgroud)
如何在保持片段之间松散耦合的同时避免此错误?我可以将所有接口包装在一个单独的类中,并使每个类实现所需的接口(如果是,如何)?我已经看到了循环耦合的其他例子,但这似乎不是我理解的情况.
编辑:我想我看到了为什么我得到错误,但仍然 - 实现某个类的接口与继承所述类相同?
谢谢!
对我而言,我也想你.请注意,如果您有一个嵌入在类中的接口类,那么嵌套.如果你这样做,两个类正在使用它,你会得到这个错误.只需获取界面并将其移动到单独的文件中,不要将其嵌入到类中.这会使错误变得安静.