我正在使用FragmentPagerAdapter
和android.support.v4.view.ViewPager
创建标签式应用程序。为了遵循最佳实践和关注点分离,我将我的应用程序分成了几个不同的片段。每个片段都有一个需要Activity
订阅的交互监听器。由于我在整个应用程序中只有一个活动,我是否必须让父(选项卡式导航)活动实现整个应用程序中的所有监听器?这似乎是不好的做法,并创建一个控制一切流量的大型单片Activity
类。
我在另一个片段中有三个片段,我用作主页标签。主页片段实现三个子片段的接口。问题是主页片段不是Activity
,因此子片段会在onAttach
上抛出异常。
我错过了什么?如何在选项卡式应用程序中实现片段侦听器,而无需创建一个大而凌乱的Activity
类
答案 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
方法。您不希望在活动中设置一组侦听器。