Android:使用返回堆栈(片段)时未更新可绘制选择器

Android : Drawable selector not updated when using back stack (fragment)

我的一个 Fragment 中的 ToggleButtons 有一些问题。我有一个主要的 activity,我在其中加载了一些片段,这些片段被添加到 BackStack。

在其中一个片段中,我有一个列表视图,上面有 3 个切换按钮。这些按钮具有可绘制的背景:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape android:shape="oval">
            <solid android:color="@color/greenbutton" />
            <stroke android:width="4dp" android:color="@color/actionBlueLight"/>
        </shape>
    </item>
    <item android:state_checked="false">
        <shape android:shape="oval">
            <solid android:color="@color/greenbutton" />
        </shape>
    </item>
</selector>

当我按下这些按钮之一时,我过滤了我的 ListView。我可以 select 我的列表中的一个项目将启动另一个片段(也添加到后台堆栈)。

我的问题是当我按下后退按钮并使用我的 ListView 返回片段时,按钮的背景没有更新。我的意思是我把 在我的片段中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance) {
    ...
    Log.d(TAG,"Green = "+buttonGreen.isChecked());
    Log.d(TAG,"Orange = "+buttonOrange.isChecked());
    Log.d(TAG,"Red = "+buttonRed.isChecked());
    ...
 }

所有按钮似乎都未选中(来自 isChecked()),但在我切换到另一个片段之前选中的按钮仍然具有对应于 state_checked="true".[=13= 的背景]

我试过 invalidate() 按钮在 onCreateView 中刷新它们,但它没有做任何事情。

好吧,我终于通过强制取消选中 Fragment 的 onStop() 方法中的 ToggleButtons 来解决我的问题。通过这种方式,我可以确定在 popBackStack() 之后重新加载片段时,默认背景不能是与 state_checked="true".

关联的背景
public void onStop () {
    buttonGreen.setChecked(false);
    buttonOrange.setChecked(false);
    buttonRed.setChecked(false);

    super.onStop();
}

它看起来像是一种解决方法,我很希望理解为什么按钮状态在 onCreateView() 中显示为 "unchecked" 而可绘制对象可见是 "checked" 按钮的状态。