我使用的是Android,它实现了片段类的所有功能。我得到以下运行时异常:
must implement OnFragmentInteractionListener这是我的代码,我已经在我的主要活动中实现了OnFragmentInteractionListener。
主要活动:
public class MainActivity extends FragmentActivity implements BlankFragment.OnFragmentInteractionListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (findViewById(R.id.fragment_container) != null) {
BlankFragment fragment = new BlankFragment();
android.support.v4.app.FragmentManager manager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft = manager.beginTransaction();
ft.add(R.id.fragment_container, fragment).commit();
}
@Override
public void onFragmentInteraction(Uri uri) {}
}空白片段:
public class BlankFragment extends android.support.v4.app.Fragment {
private OnFragmentInteractionListener mListener;
public interface OnFragmentInteractionListener {
public void onFragmentInteraction(Uri uri);
}
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
}片段类和main活动的其余方法也在默认情况下实现。我还用FrameLayout在main_activity.xmlfile and also assignedandroid: is `中更改了FrameLayout,这是很好的参考。我的密码怎么了?
发布于 2015-07-15 09:21:30
要与您的BlankFragment对象交互,我将使用Android支持文档中推荐的以下方法--我相信这是您正在尝试实现的,而且它将适合于BlankFragment对象由MainActivity托管
public class MainActivity extends FragmentActivity implements BlankFragment.OnFragmentInteractionListener {
private BlankFragment fragment = null;
private android.support.v4.app.FragmentManager manager = null;
private android.support.v4.app.FragmentTransaction ft;
public void onFragmentInteraction(Uri uri){
Log.i("Tag", "onFragmentInteraction called");
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (manager == null) manager = getSupportFragmentManager();
if(manager.findFragmentById(R.id.fragment_container) == null) {
//If a fragment is not already loaded into your container, then add one...
fragment = new BlankFragment();
ft= manager.beginTransaction();
ft.add(R.id.fragment_container,fragment).commit();
}
}为了与片段进行通信,您将执行以下操作:
if(fragment == null) {
fragment = (BlankFragment) manager.findFragmentById(R.id.fragment_container);
}然后,您可以调用任何与fragment关联的方法。
如果相反(从片段到活动之间的通信),则需要在BlankFragment中执行以下操作,以便与父Activity形成链接
//Class variable...
OnFragmentInteractionListener mCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}您可能已经忘记了这最后一步,这可以解释您的错误。然后,您可以使用:
mCallback.onFragmentInteraction(uri);与MainActivity通信
发布于 2017-02-17 15:21:03
这对我有用,我刚刚在这里分享了它,你永远不知道它会帮助其他人。
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();只有一行代码。
https://stackoverflow.com/questions/31425672
复制相似问题