如何使用一个活动管理多个片段?

时间:2016-02-01 12:34:55

标签: android android-fragments

关于管理片段的快速问题。 现在我正在使用这个结构:

我有一个 MainActivity和多个片段,即LoginFragmentInventoryFragmentNetworkFragment等。我正在使用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的引用。

3 个答案:

答案 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())

}