哦,
所以首先我有一个活动

public class MainActivity extends FragmentActivity
{
    private FragmentA a;
    private FragmentB b;
    private FragmentC c;
    private HomeFragment mHomeFragment;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_activity_layout);
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.fragment_container, mHomeFragment) // replace flContainer
                .addToBackStack(null)
                .commit();

    ...
    }



我使用一些惰性初始化程序,并将对象a,b,c和mHomeFragment保留在我的活动对象中,

我在“ b”中有一个按钮,它调用MainActivity来调用“ c”
在“ c”内部的一个按钮,它调用MainActivity来调用“ b”

还有一些其他按钮来叫“ a”并不重要

现在,在我的FragmentB中,我有一些自定义视图,

  public CustomView(Context cnx, SettingsViewElement e, FragmentA fragment)
    {
    super(cnx);
    inflate(cnx, R.layout.my_layout,this);
    parent = fragment; // i use it later in my onCheckedChangeListener to tell him the the switch has been checked
    condition = parent.getCondition();

    titleTv = this.findViewById(R.id.title_tv);
    switch  = this.findViewById(R.id.switch);
    if(condition){
    switch.setChecked(true);
    titleTv.setTitle("i am depressed af :(");

    }





我的问题是:

为什么即使我的titleTv正在更新标题,我的开关也没有被选中?

我做了一些测试,每次我在片段事务中调用replace()时,都会调用OnCreated()。

我的片段重新实例化了视图,然后在扩大布局后将它们添加到linearLayout中。

另外,如果我不将片段引用保存在MainActivity中,然后每次重新实例化。
在这里:switch.setChecked将起作用,
但是backStack会很大又笨

例如:stack ='b'->'c'->'b'->'c'
通常,当用户单击两次返回按钮时,他会回到homeFragment,
他不需要自己清空堆栈。

即使我每次重写@onBackPressed()并重新实例化片段,希望每次android sdk都会释放空间。

每当我想在设计中添加新片段时,都必须手动进行操作,这将是对轮子的重新发明。

和:它不解释为什么Switch.setChecked()不起作用,即使条件为true并且其他视图正在更新(textView正在更新其文本)


更新:显然,

如果片段被重新使用并且onCreate()被调用
第二次,(片段的引用保存在某个地方
和片段被附加第二次)在这里setChecked
不会生效,只有其他一些视图更新

同时,只有在第一次调用它时,它才会起作用
片段正在创建中

解决方案:更新OnResume()方法中的视图

如果有人对此有解释,请继续

最佳答案

更新:
显然,

如果片段被重用并且第二次调用onCreate(),(片段的引用被保留在某个地方,片段被附加了第二次)
这里的setChecked不会生效,只有其他一些视图更新

同时,它只有在第一次创建该片段时才起作用,

解决方案:
在OnResume()方法中更新视图

如果有人对此有解释,
请继续

10-01 09:40