安卓:为什么在返回BackStack后,SwitchCompat.setChecked(true)不起作用?

3

我在FragmentonViewCreated(...)中执行了switchCompat.setChecked(true),第一次运行时它可以正常工作,但是从BackStack返回后就无法正常工作。

日志显示switchCompat.isChecked()true,但是SwitchCompat的UI状态却是关闭的。非常奇怪的是,在OnCheckedChangeListener中的onCheckedChanged方法中参数命名为isChecked也是false

有人能告诉我为什么吗?

这个Fragment

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

    ......other code......

    initialSnooze();

}


private void initialSnooze() {
    mSwitchSnooze.setChecked(mAlarm.isSnooze());
    Log.d("TAG", "initialSnooze: "+mAlarm.toString()+" "+mSwitchSnooze.isChecked());
}

切换到下一个片段

 private void switchFragment(Fragment fragment,String tag){
        FragmentTransaction fragmentTransaction=getSupportFragmentManager().beginTransaction();
        fragmentTransaction.addToBackStack(tag);        
        fragmentTransaction.replace(android.R.id.content, fragment, tag);
        fragmentTransaction.commit();
    }

返回按钮从后堆栈中返回

    @Override
public void onBackPressed() {
    //回退栈中有Fragment
    int count = getSupportFragmentManager().getBackStackEntryCount();
    if (count == 0) {
        super.onBackPressed();
    } else {
        getSupportFragmentManager().popBackStack();
    }
}

在第二个片段中,涉及到IT技术相关内容。
    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mAlarm = getArguments().getParcelable(PARAM_ALARM);
    }
    mAlarm.setSnooze(true);
}

你可以让我们看一下你正在尝试的代码吗? - pRaNaY
请发布一些你的代码。 - Jay Rathod
我在 @jaydroider 发布了代码。 - zys
我发布了代码@pRaNaY - zys
@pRaNaY 它可以工作,但我也想知道为什么?onViewCreated将在从BackStack返回并创建视图时执行,为什么要使用onResume - zys
显示剩余3条评论
2个回答

4
在onResume()中调用initialSnooze();

0

switchCompat会在OnViewCreate中恢复状态。因此,如果您在OnCreateView中设置switchCompat,则会被覆盖。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接