我阅读了有关如何将片段添加到活动的Android文档。它说要将一个片段添加到Activty我应该在Activity类中编写这个代码:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
但这是针对android.app.Fragment类的。 对于android.support.v4.Fragment,文档说我应该调用getSupportFragmentManager()而不是getFragmentManager(),而Activity必须扩展FragmentActivty。 所以我做了这个改变,现在这是我的活动代码:
public class ExampleActivity extends AppCompactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
}
AppCompactActivity是FragmentActivity的子类,因此我尊重约束。
问题是,如果我运行我的应用程序,我会收到此错误:
java.lang.RuntimeException:
com.myapplication.ExampleActivity@13388c6 must implement OnFragmentInteractionListener
我在Android doc web search上输入了OnFragmentInteractionListener,这就是我得到的:
紧接下方有链接 https://developer.android.com/training/basics/fragments/communicating.html
它向我展示了片段之间的通信指南。它讲的是ListFragment,我并不关心它。
我非常困惑,因为每次我阅读文档时,总会有一些事情迫使我进行互联网搜索以找到解决方法或解决问题。
是否有人可以先解释我如何解决这个问题。
答案 0 :(得分:0)
从tutorial,您可以阅读以下内容:
为了从片段接收事件回调,活动 托管它必须实现片段中定义的接口 类。
因此,在您的Activity中使用您的片段中的类似内容实现它:
public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
...
public void onArticleSelected(int position) {
// The user selected the headline of an article from the HeadlinesFragment
// Do something here to display that article
}
}
你为什么需要它?因为你强迫主持人活动用这样的东西来实现它:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}