我正在使用 Android Studio,它实现了 fragment 类的所有功能。我收到以下运行时异常:
must implement OnFragmentInteractionListener
这是我的代码,我在我的主要 Activity 中实现了 OnFragmentInteractionListener
。
主要 Activity :
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) {}
}
空白 fragment :
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");
}
}
}
fragment类和main activity的其余方法也是默认实现的。我还在 main_activity.xml 文件中将
android:id` 给它,引用很好。我的代码有什么问题?LinearLayout
更改为 FrameLayout
并且还分配了
最佳答案
要与您的 BlankFragment
对象交互,我会使用 Android Support Docs 中推荐的以下方法- 我相信这就是您要实现的目标,并且适合您的 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();
}
}
为了与您的 fragment 进行通信,您需要执行以下操作:
if(fragment == null) {
fragment = (BlankFragment) manager.findFragmentById(R.id.fragment_container);
}
然后您可以调用与 fragment
关联的任何方法
如果是相反的方式(从 fragment 到 Activity 的通信),那么您需要在 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
通信
关于java - 如何在我的 Activity 中动态添加 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31425672/