CheckBox 中的 setChecked 和 setSelected 不起作用

问题描述 投票:0回答:2

我有一个 Activity,其中有 5 个片段。我用过

 viewPager.setOffscreenPageLimit(fragmentList.size());

能够一次性创建所有片段 我还有一个监听器,一旦我有一个 newIntent,它就会将参数(对象)传递给所有片段。

在我的一个片段中,我有一个复选框,应根据活动中的参数选择它。 和其他观点,我能够改变他们的文本和背景的价值。 只是这个复选框我已将其设置为打开但是当我看到它时,我发现它已关闭,所有其他事件都运行良好。

这是活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.AppTheme_PopupOverlay);
    setContentView(R.layout.activity_configurations);

    ViewPager viewPager = findViewById(R.id.container);
    TabLayout tabLayout = findViewById(R.id.tabs);

    setNdef(getIntent().getExtras());
    String type = getNdef().getString("id");

    List<Fragment> fragmentList = createFragments(type);
    SectionsPagerAdapter pagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), fragmentList);
    viewPager.setAdapter(pagerAdapter);

    fillTableLayout(tabLayout, type);

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
    viewPager.setOffscreenPageLimit(fragmentList.size());
    readNfcDialog = createReadDialog();
    writeNfcDialog = createWriteDialog();
    readNfcDialog.show();
    setForeground();
}

 @Override
protected void onNewIntent(Intent intent) {

    super.onNewIntent(intent);

   
    ClassNfcTag wepTag = new ClassNfcTag(intent);
    String type = wepTag.defineClassTag();
    OmsRepeaterTag omsRepeaterTag = new OmsRepeaterTag(intent);
    byteMap = omsRepeaterTag.readTag();
   if (byteMap != null) {
   setTagOmsConfiguration(OmsConfiguration.fromByteArray(byteMap));
   for (OmsListener listener : onReceiveOmsList) {
        listener.gotOms(getInTagOmsConfiguration());
       }
   }
}

这是其中一个片段

    @Override
public void gotOms(OmsConfiguration configuration) {
    setConfiguration(configuration);
    if (isAdded()) {
    boolean status = getConfiguration().getDeleteRsl();
    delete.setChecked(status);
    delete.setSelected(status);

    }
}

作为解决方案,我尝试使用 Switch 而不是 CheckBox,效果很好。

我还尝试将寻呼机设置为从具有复选框的片段开始,它也可以工作。

viewPager.setCurrentItem(checkBoxFragmentPosition);

我还尝试调试代码,它显示复选框已选中,当我尝试通过触摸它将其更改为选中时(以编程方式选中它,在 UI 中我看到它未选中),它会将自身从未选中更改为未选中。然后下一次触摸更改为选中。

java android checkbox interface
2个回答
1
投票

对于那些会读到这个问题的人来说,这只是android中一个未解决的错误。 对于我的情况,我使用

toggleButton
代替
checkBox


0
投票

我找到了解决方案,请参阅下文。

我的复选框正是这种行为。事实上,解决这个问题的一种方法是从 CheckBox 切换到

com.google.android.material.switchmaterial.SwitchMaterial
又名 ToggleButton。

但后来我注意到 RadioGroup 中的 RadioButton 具有相同的行为。它被初始化为签入我的代码,但在 UI 中只有它的轮廓具有“选中”颜色,填充(中间)丢失,就像未选中一样。第一次单击使其真正取消选中,下一次单击则选中,然后是正常行为。

解决方案是将调用移至

viewModel.setIsAllowed(..)
- 这会导致调用该场的观察者并最终调用
binding.myCheckBox.setChecked(isChecked)
- 从
MyFragment.onViewCreated
MyFragment.onResume
。我的单选按钮也是如此。之后,复选框和单选按钮都在 UI 中正确初始化:未选中或选中。

© www.soinside.com 2019 - 2024. All rights reserved.