关于管理片段的快速问题。 现在我正在使用这个结构:
我有一个 MainActivity
和多个片段,即LoginFragment
,InventoryFragment
,NetworkFragment
等。我正在使用FragmentManager
对于传输而言,它到目前为止工作得很好。
但我遇到了一个问题。它是关于处理从Fragments到Activity的回调。
我使用接口回调的简单方法,我在片段中定义并在MainActivity中实现,但随着越来越多的片段,它变得越来越拥挤的接口。
它看起来像这样的例子
public class MainActivity extends AppCompatActivity implements LoginFragmentCallback, InventoryFragmentCallback, NetworkFragmentCallback, AnyFragmentCallback
所以我的问题是如何更好地管理Fragment和Activity之间的沟通?
感谢您的帮助!
编辑1:我知道如何使用来自用户@ Rohit5k2
的评论来解决这个问题在我的MainActivity中,我制作了一个公共方法
public class MainActivity extends AppCompat{
public callMe();
}
在我的片段中,我可以通过
调用此方法public class AnyFragment extends Fragment{
private void someMethod(){
((MainActivity)getActivity()).callMe();
}
我认为似乎解决了这个问题。还是不好?有了这个,我不需要实现任何回调,因为我有一个带有片段的MainActivity的引用。
答案 0 :(得分:2)
我自己喜欢活动+很多片段,所以我使用这种方法。
活动实现接口
interface ControllerAccess {
<T> getController(Class<T> clazz);
}
我有Map<Class,Object>
个活动。在onCreate
中,我使用特定于片段的控制器类填充它,例如你的LoginFragmentCallback
等。
map.put(LoginFragmentCallback.class,new LoginFragmentCallbackImpl());
和接口实现看起来像这样
public <T> T getController(Class<T> clazz) {
return (T) map.get(clazz);
}
在片段中我做了类似
的内容LoginFragmentCallback callback;
void onAttach(Activity activity) {
if (activity instanceof ControllerAccess) {
callback = (ControllerAccess)activity.getController(LoginFragmentCallback.class);
}
}
答案 1 :(得分:0)
如果您需要将Fragment
的数据发送到Activity
,则可以使用getActivity
并将其投放到您的主要活动中。
如果你想走向另一个方向,也许你做错了什么。 Fragment
必须与其托管活动足够独立。
另一个建议是使用Activity
进行登录,之后启动主要登录。
对于其他类型的通讯,我推荐EventBus: https://github.com/greenrobot/EventBus
答案 2 :(得分:0)
public class MainActivity extends FragmentActivity implements FragmentInteractionListener {
//your main activity code
}
public class Fragment1 extends Fragment {
//you can get resource from MainActivity using below code
(MainActivity) getActivity().getSomeInfo())
}