Android:在外部类中实现内部类;来自内部类和外部类的回调
我在一个活动中有多个片段,应该能够在它们之间传递数据。我使用了教程来实现回调。我的MainActivity是我的片段类所在的外部类。此外,我还有一个FragmentPagerAdapter来处理片段转换。 问题是,Eclipse不允许我为MainActivity外部类实现回调接口,该接口包含在其中一个片段中 这是我的代码结构:Android:在外部类中实现内部类;来自内部类和外部类的回调,android,interface,callback,fragment,outer-classes,Android,Interface,Callback,Fragment,Outer Classes,我在一个活动中有多个片段,应该能够在它们之间传递数据。我使用了教程来实现回调。我的MainActivity是我的片段类所在的外部类。此外,我还有一个FragmentPagerAdapter来处理片段转换。 问题是,Eclipse不允许我为MainActivity外部类实现回调接口,该接口包含在其中一个片段中 这是我的代码结构: public class MainActivity extends FragmentActivity **implements ConnectionFragment.da
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发送数据
我感谢你的帮助 在声明接口之前,似乎不能使用它。不能实现内部接口或扩展内部类。只需将
ConnectionFragment
移动到它自己的文件中
这是因为在编译时,这些内部类依赖于父类,而不是相反。作为证明,如果您查看已编译的.class文件,这些内部对象被编译为
MainActivity$ConnectionFragment.class
或其他相关内容。但是,如果ConnectionFragment
被编译到它自己的文件(ConnectionFragment.cass
),那么MainActivity.class
可以依赖于它,Eclipse将自动处理构建顺序。片段应该永远不会彼此直接交互,因为这会产生不需要的耦合
您的片段应该调用活动实现的接口方法与活动通信,然后活动可以与其他片段通信/中继该交互。谢谢!成功了。但不幸的是,我的应用程序仍然存在将数据从一个片段发送到另一个片段的问题。。但我想这应该是另一个问题