Android开发的循环继承 - 片段,活动和接口

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)

如何在保持片段之间松散耦合的同时避免此错误?我可以将所有接口包装在一个单独的类中,并使每个类实现所需的接口(如果是,如何)?我已经看到了循环耦合的其他例子,但这似乎不是我理解的情况.

编辑:我想我看到了为什么我得到错误,但仍然 - 实现某个类的接口与继承所述类相同?

谢谢!

j2e*_*nue 8

对我而言,我也想你.请注意,如果您有一个嵌入在类中的接口类,那么嵌套.如果你这样做,两个类正在使用它,你会得到这个错误.只需获取界面并将其移动到单独的文件中,不要将其嵌入到类中.这会使错误变得安静.