-->

的Android:实现在外部类内部类; 从内部类和外部类回调(Android: Implemen

2019-10-29 03:18发布

我有一个活动的多个片段,应该是能够通过数据其间他们。 我已经使用教程来实现回调。 我的MainActivity是外部类中,我的片段类。 此外,我有一个处理的片段转变的FragmentPagerAdapter。 那么事情是,Eclipse将不会让我实现我的回调接口,包含在一个片段,我的MainActivity外部类。

这是我的代码的结构:

public class MainActivity extends FragmentActivity **implements ConnectionFragment.dataCallback**{ 
//compiler error here:"ConnectionFragment cannot be resolved to a type" 
//when i leave this out i get runtime error: "MainActivity java must 
//implement dataCallback"

...

    public class SectionsPagerAdapter extends FragmentPagerAdapter  implements ConnectionFragment.dataCallback{
        @Override
        public void updateLog(View v, String line) {
            DataFragment dataFrag = (DataFragment)getSupportFragmentManager().findFragmentByTag(DataFragment.class.getName());
                if (dataFrag != null){
                    dataFrag.updateLog(v,line);
                }
        }
    ...

    }
    public static class ConnectionFragment extends Fragment {
    ...
        public interface dataCallback{
        public void updateLog(View v, String line);
        }
        dataCallback mCallback;
        private static dataCallback dummyCallback=new dataCallback(){
             @Override
             public void updateLog(View v, String line){    
             }
        };

        @Override
        public void onAttach(Activity activity){
            super.onAttach(activity);
            try {
                mCallback = (dataCallback)activity;
            } catch (ClassCastException e){
            throw new ClassCastException(activity.toString() + " must implement dataCallback");
         }
    }
    }
    public static class DataFragment extends Fragment implements ConnectionFragment.dataCallback{
        public void updateLog(View v,String line){

             TextView logTextView=(TextView)v.findViewById(R.id.log_view);
             logTextView.append("\n"+line);
    }

    ...
    }
    public static class GraphFragment extends Fragment {
    ...
    }
}

ConnectionFragment应该能够将数据发送到DataFragment。

我感谢您的帮助!

Answer 1:

您不能实现内部接口或扩展的内部类。 只需将ConnectionFragment到自己的文件。

这是因为在编译时,这些内部类是依赖于父类 - 并且永远周围的其他方法。 为了证明这一点,如果你看一下编译的.class文件,这些内部的对象被编译为MainActivity$ConnectionFragment.class或某事有-abouts。 但是,如果ConnectionFragment被编译成它自己的文件( ConnectionFragment.cass ),然后MainActivity.class可以依靠它,Eclipse会自动处理构建顺序。



Answer 2:

片段永远不应该直接互相交流,因为这将创建不需要的耦合。

您的片段应该调用由活动实现的接口方法与活动通信,则活性可通信/中继,与其他片段的相互作用。



Answer 3:

它似乎是在声明它之前,你不能使用的接口。



文章来源: Android: Implement inner class in outer class; callback from inner class and outer class