java - 如何在我的 Activity 中动态添加 fragment ?

标签 java android android-layout android-fragments

我正在使用 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 文件中将 LinearLayout 更改为 FrameLayout 并且还分配了 android:id` 给它,引用很好。我的代码有什么问题?

最佳答案

要与您的 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/

相关文章:

java - 使用 ESAPI 时看不到程序的日志消息

android - 如何从 firebase 下载 pdf 并从我的应用程序目录访问它?

android - 有没有办法根据应用程序主题更改启动画面之前的空白屏幕颜色?

java - jFreeChart。组合图表错误内子图的高度?

java - JSON 对象数组转 Java POJO

java - 类型参数中的 ">>"是否使用特殊规则标记化?

java - 在按钮单击时添加一个文本字段到第二个主要 Activity

android - 如何在Android的默认短信表中保存短信的发送状态

android-layout - 容器在 Android Studio 预览版中扩展

android - 以编程方式获取指南百分比大小(以像素为单位)