gpt4 book ai didi

java - 仅 Switch.setChecked 在显示 fragment 时不起作用?

转载 作者:行者123 更新时间:2023-12-01 18:05:21 26 4
gpt4 key购买 nike

我有一个 Activity :

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 保留在我的 Activity 对象中,

我在“b”内有一个按钮,可以调用 MainActivity 来调用“c”和“c”内的一个按钮,调用 MainActivity 来调用“b”

还有一些其他按钮来调用“a”,这并不重要

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

  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 正在更新标题,我的开关也不会被选中??

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

我的 fragment 重新实例化 View ,然后在膨胀布局后将它们添加到线性布局。

此外,如果我没有在 MainActivity 中保留 fragment 引用,然后每次都重新实例化它。这里: switch.setChecked 将起作用,但 backStack 将会变得巨大且愚蠢

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

即使我重写 @onBackPressed() 并每次重新实例化 fragment ,希望 android sdk 能够释放空间。

每次我想在设计中添加新 fragment 时,我都必须手动执行此操作,这将是轮子的重新发明。

并且:它没有解释为什么 即使条件为真并且其他 View 正在更新(textView 正在更新),Switch.setChecked() 也不起作用这是文本)

Update : Apparently,

if the fragment is being re-used and the onCreate() is called for thesecond time, (the reference for the fragment is being kept somewhereand fragment is being attached for a second time) here the setCheckedwill not take an effect, only some other view updates

meanwhile, it will only work if it's being called for the first timethe fragment is being created,

Solution : updating the views in the OnResume() method

If someone has an explanation for this, please go ahead

最佳答案

更新:显然,

如果 fragment 被重新使用并且 onCreate() 被第二次调用,( fragment 的引用被保存在某处并且 fragment 被附加第二次)这里setChecked不会生效,只会更新一些其他 View

同时,只有在第一次创建 fragment 时调用它才会起作用,

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

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

关于java - 仅 Switch.setChecked 在显示 fragment 时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60567140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com