恢复时,Android活动会自动创建新的片段实例

布洛加德

我有以下问题:当我在调用另一个活动之后恢复活动时,系统会自动创建另一个片段,因此当我从其他方法更新视图时,它们会更新隐藏的片段。如何避免这种情况?

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);

        frag_ID = R.layout.frag;        
        AccountFragment fragment = new AccountFragment();   
        getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commit();      
    }

    @Override
    protected void onStart() 
    {
        super.onStart();


        ... update method ...
        TextView textView = (TextView) findViewById(R.id.total_account_textview);
        // when I launch another activity and the return to this, this textview is on a hidden fragment and not in the foreground fragment
    }

    public static class AccountFragment extends Fragment 
    {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        {   
            return inflater.inflate(frag_ID, container, false);
        }

        @Override
        public void onViewCreated (View view, Bundle savedInstanceState) 
        {
            super.onViewCreated(view, savedInstanceState);

            TextView textView;

            ...
        }

谢谢!

vilpe89

您需要检查布局是否已经在该ID中添加了片段

FragmentManager manager = getSupportFragmentManager();
if (manager.findFragmentById(R.id.container) == null) {
    manager.beginTransaction().add(R.id.container, fragment)
           .commit();
}

同样,如果您想将片段更改为另一个片段,则可能还要检查已经添加到其中的片段。

然后看起来像这样

private void setFragment(Class<? extends Fragment> fragmentClass) {
    try {
        Fragment newFragment = fragmentClass.newInstance();
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.container);
        if (currentFragment == null || !currentFragment.getClass().equals(newFragment)) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.container, newFragment).commit();
        }
    } catch(Exception ignored) {}
}

在这种情况下,通知add已更改为替换

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建新活动时无法添加片段

Android将数据从活动传递到片段,而无需创建新实例

Android片段:创建活动时

Android“ singleTask”活动创建该活动的新实例

在创建托管在 AWS 上的 Snowflake 的新实例时,是否会自动设置到 S3 的数据存储?

使用Intent时如何销毁和创建新的活动实例

恢复时,Android活动崩溃

从中创建新列时,索引会自动替换

每次新实例时,Android活动方向更改

Android:恢复活动的特定实例

新活动启动时或恢复到上一个活动时的Android FAB动画

在Android上使用下拉导航模式旋转设备时,如何保存/恢复片段实例?

重新创建活动后在Android中恢复实例变量

从片段启动新活动时崩溃

通知总是创建新活动,而不是恢复先前的活动

在Android Studio中创建新活动时出错

AWS会自动继续创建ECS实例。

创建新活动时出错

在 Android Studio 中从片段启动新活动

实例化新的Android片段的最佳做法

如何在创建新EC2实例时创建自动Cloudwatch警报

恢复活动时,意图额外内容会丢失。

Android-如何阻止片段自动恢复其状态?

防止Android(和MVVMCross)中的片段状态自动恢复

从片段开始时,活动会多次启动

创建新实例时,是否会再次声明python中的类变量?

为什么当我创建函数的新实例时函数内部的代码会运行

实例化片段Android时的KotlinNullPointerException

如何活动的片段得到恢复活动重新启动时?