【问题标题】:Android: Implement inner class in outer class; callback from inner class and outer classAndroid:在外部类中实现内部类;内部类和外部类的回调
【发布时间】:2013-04-26 17:33:17
【问题描述】:

我在一个活动中有多个片段,应该能够在它们之间传递数据。我已经使用教程来实现回调。我的 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 发送数据。

感谢您的帮助!

【问题讨论】:

    标签: android interface callback fragment outer-classes


    【解决方案1】:

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

    这是因为在编译时,这些内部类依赖于父类——绝不会反过来。作为证据,如果您查看编译后的 .class 文件,这些内部对象被编译为MainActivity$ConnectionFragment.class 或类似的东西。但是,如果ConnectionFragment 被编译成它自己的文件(ConnectionFragment.cass),那么MainActivity.class 可以依赖它,Eclipse 会自动处理构建顺序。

    【讨论】:

    • 谢谢!有效。但不幸的是,我的应用仍然存在将数据从一个片段发送到另一个片段的问题。但我猜这应该是另一个问题
    【解决方案2】:

    片段应该从不直接相互交互,因为这会产生不希望的耦合。

    您的 Fragment 应调用 Activity 实现的接口方法与 Activity 通信,然后 Activity 可以与其他 Fragment 通信/中继该交互。

    【讨论】:

      【解决方案3】:

      在声明接口之前似乎不能使用它。

      【讨论】:

        猜你喜欢
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 2023-01-24
        • 2014-08-21
        • 2022-11-02
        • 1970-01-01
        相关资源
        最近更新 更多