首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的活动中动态添加片段?

问如何在我的活动中动态添加片段?
EN

Stack Overflow用户
提问于 2015-07-15 08:49:26
回答 2查看 9K关注 0票数 5

我使用的是Android,它实现了片段类的所有功能。我得到以下运行时异常:

代码语言:javascript
复制
must implement OnFragmentInteractionListener

这是我的代码,我已经在我的主要活动中实现了OnFragmentInteractionListener。

主要活动:

代码语言:javascript
复制
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) {}

}

空白片段:

代码语言:javascript
复制
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,这是很好的参考。我的密码怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-15 09:21:30

要与您的BlankFragment对象交互,我将使用Android支持文档中推荐的以下方法--我相信这是您正在尝试实现的,而且它将适合于BlankFragment对象由MainActivity托管

代码语言:javascript
复制
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();
    }
}

为了与片段进行通信,您将执行以下操作:

代码语言:javascript
复制
if(fragment == null) {
    fragment = (BlankFragment) manager.findFragmentById(R.id.fragment_container);
}

然后,您可以调用任何与fragment关联的方法。

如果相反(从片段到活动之间的通信),则需要在BlankFragment中执行以下操作,以便与父Activity形成链接

代码语言:javascript
复制
//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");
        }
    }

您可能已经忘记了这最后一步,这可以解释您的错误。然后,您可以使用:

代码语言:javascript
复制
mCallback.onFragmentInteraction(uri);

与MainActivity通信

票数 4
EN

Stack Overflow用户

发布于 2017-02-17 15:21:03

这对我有用,我刚刚在这里分享了它,你永远不知道它会帮助其他人。

代码语言:javascript
复制
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();

只有一行代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31425672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档