【问题标题】:Issues with code in dynamically created fragments动态创建的片段中的代码问题
【发布时间】:2015-04-02 20:50:55
【问题描述】:

我正在构建一个包含多个页面的应用程序,每个主要页面都显示在主要活动的一个片段中。每当用户想要更改页面时,活动中的片段都会更改。

我想在自己的 java 文件中为每个片段编写代码,而不是为主要活动中的所有片段编写代码。

我已经尝试将每一段代码放在片段的 onCreate 和 onCreateView 方法中(包括尝试 onStart、onPause 和其他所有加载方法),但我注意到在创建片段时代码没有运行.

我在这里看到过类似问题的其他问题,但没有一个答案为我提供了实际的解决方案。

我的问题是,如何在该片段的 java 文件中为每个片段编写代码并真正让它运行?我知道如果我的片段是在活动中静态创建的,但这些片段不是,它们是在运行时创建的,这会容易得多。

作为参考,每个片段都显示在活动中,如下所示:

fragmentManager.beginTransaction().replace(R.id.container, HomeFragment.newInstance(position)).commit();

【问题讨论】:

    标签: java android android-layout android-fragments android-activity


    【解决方案1】:

    试试这个,
    从主要活动中,您可以调用片段类中定义的静态方法

    AuthFragment.NewInstance(LoginActivity.this, constantsObj);
    

    这一行将进入您的片段调用活动。

    现在在您的片段中,在静态方法中,找到并创建片段,

     public static void NewInstance(LoginActivity activityContext, Constants constantsObj) {
        clsConstantsObj = constantsObj;
        urlToCatch = clsConstantsObj.toString();
        urlToCatch = urlToCatch.replace("/params", "");
    
        FragmentManager fragmentManager;
        FragmentTransaction fragmentTransaction;
        activityContextInFragment = activityContext;
    
        fragmentManager = activityContext.getSupportFragmentManager();
    
        AuthFragment findAuthFragment = (AuthFragment) fragmentManager
                .findFragmentByTag("authFragment");
    
        if (findAuthFragment == null) {
            AuthFragment authFragment = new AuthFragment();
            fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.mainviewRegionwise, authFragment, "authFragment");
            fragmentTransaction.commit();
        }
    }
    

    注意“R.id.mainviewRegionwise”,它是主容器的 id,可以是 FrameLayout 或任何其他容器。

    【讨论】:

    • 在这种情况下什么是authFragment?那是占位符片段还是我在其中创建此方法的片段?澄清一下,第二个代码块是在我试图打开的片段中吗?
    • 1.在这种情况下,什么是 authFragment?那是占位符片段还是我在其中创建此方法的片段? ---> AuthFragment 是您尝试动态创建的片段。并且代码将进入调用活动或片段.... 2.为了澄清,第二个代码块是否进入我试图打开的片段中? --->> 是的,你是对的,第二个块将进入你的动态片段类
    • 谢谢,这成功了。我昨天意识到我实际上犯了一个更大的错误,我现在已经改正了,但这有助于我整理一下。非常感谢。
    猜你喜欢
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2017-05-23
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多