FragmentPagers中的片段交互侦听器

时间:2015-05-18 22:16:13

标签: android android-fragments android-activity android-viewpager fragmentpageradapter

我正在使用FragmentPagerAdapterandroid.support.v4.view.ViewPager创建标签式应用程序。为了遵循最佳实践和关注点分离,我将我的应用程序分成了几个不同的片段。每个片段都有一个需要Activity订阅的交互监听器。由于我在整个应用程序中只有一个活动,我是否必须让父(选项卡式导航)活动实现整个应用程序中的所有监听器?这似乎是不好的做法,并创建一个控制一切流量的大型单片Activity类。

我在另一个片段中有三个片段,我用作主页标签。主页片段实现三个子片段的接口。问题是主页片段不是Activity,因此子片段会在onAttach上抛出异常。

我错过了什么?如何在选项卡式应用程序中实现片段侦听器,而无需创建一个大而凌乱的Activity

2 个答案:

答案 0 :(得分:1)

在进一步研究不同的关键词后,我在这里找到了一个很好的答案:https://stackoverflow.com/a/23144683/2435006

他们的关键是制作onAttachFragment(Fragment f)方法,而不是使用onAttach(Activity a)并在onCreate方法中调用它。

以上是上面答案的例子:

public void onAttachFragment(Fragment fragment)
{
    try
    {
        mListener = (OnInteractionListener) fragment;

    } catch (ClassCastException e)
    {
          throw new ClassCastException(fragment.toString() + " must implement OnInteractionListener");
    }
 }


 @Override
 public void onCreate(Bundle savedInstanceState)
 {
    Log.i(TAG, "onCreate");
    super.onCreate(savedInstanceState);

    this.mContext = getActivity().getApplicationContext();
    onAttachFragment(getParentFragment());
    ....
 }

答案 1 :(得分:0)

我认为你需要一个与Fragments相关的好样本。以下是一个详细说明@ ViewPager with FragmentPagerAdapter的示例。听众在片段处使用onCreateView方法。您不希望在活动中设置一组侦听器。