Android:使用后台堆栈(片段)时不会更新Drawable选择器

时间:2015-06-24 14:33:45

标签: android android-fragments selector togglebutton back-stack

我的片段中有一些ToggleButtons的麻烦。我有一个主要的活动,我加载一些我添加到BackStack的片段。

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

<?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。我可以在我的列表中选择一个项目,它将启动另一个片段(也添加到后栈)。

我的问题是,当我按下后退按钮并使用我的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”相对应的背景。

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

1 个答案:

答案 0 :(得分:0)

好吧,我终于设法通过强制取消我的Fragment的onStop()方法中的ToggleButtons来解决我的问题。这样我就确定当popBackStack()之后片段将被真实地加载时,默认背景不能是与state_checked =&#34相关联的那个;&#34;。

public void onStop () {
    buttonGreen.setChecked(false);
    buttonOrange.setChecked(false);
    buttonRed.setChecked(false);

    super.onStop();
}

它看起来像一个解决方法,我很希望理解为什么按钮状态显示为&#34;未选中&#34;在onCreateView()中,而drawable visible是&#34; checked&#34;的按钮。