【问题标题】:Android Studio changing background color from fragment not working?Android Studio从片段更改背景颜色不起作用?
【发布时间】:2016-05-21 06:20:57
【问题描述】:

我正在尝试通过设置页面更改整个应用程序的背景颜色,我已经搜索了很长时间,至今找不到解决方案。

所以,在片段内部我有一个按钮,它充当一个切换开关。单击时,背景颜色会发生应有的变化,从白色到灰色交替变化。

这里是按钮的逻辑:

Button changeBGButton = (Button) view.findViewById(R.id.btn_change_bg);
    changeBGButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (((MainActivity)getActivity()).bgWhite == true)
            {
                //White is true, set to grey
                ((MainActivity)getActivity()).bgWhite = false;
                ((MainActivity)getActivity()).bgGrey = true;
                Toast.makeText(getActivity(), "Set is white to false, grey to true.", Toast.LENGTH_SHORT).show();
            }
            else if (((MainActivity)getActivity()).bgWhite == false && ((MainActivity)getActivity()).bgGrey == true)
            {
                //White is true, set to grey
                ((MainActivity)getActivity()).bgWhite = true;
                ((MainActivity)getActivity()).bgGrey = false;
                Toast.makeText(getActivity(), "Set is white to true, grey to false.", Toast.LENGTH_SHORT).show();
            }
        }
    });

OnCreateView 覆盖方法内部的主要活动负责更改背景颜色,并且确实如此。单击按钮后,它会发生变化。

但是…… 当按下后退按钮返回到后台堆栈中的上一个屏幕时,背景变为白色,如果我再次进入设置页面,它是灰色的,并且在按下返回时再次变为白色。

就好像只有fragment改变了背景,但是布局contentLayout只存在于mainLayout而不是fragment上。

我怀疑在调用 Fragment Lifecycle Methods 期间背景正在被重置,但我不知道如何让它持续存在,因为按下后退按钮时没有保存实例。

无论如何。下面是改变背景的逻辑,包括覆盖方法:

 @Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
{
    if (contentMain != null) //Only do this if we have a hope at not crashing the application/
    if (bgWhite == true && bgGrey == false)
    {
        contentMain.setBackgroundColor(Color.parseColor("#FFFFFF"));
    }
    else if (bgGrey == true && bgWhite == false)
    {
        contentMain.setBackgroundColor(Color.parseColor("#888888"));
    }

    return super.onCreateView(parent, name, context, attrs);
}

我也尝试在 OnBackstackChangeListener 内部执行此操作,但结果相同。请帮帮我。

干杯。

【问题讨论】:

    标签: android android-layout android-fragments android-studio


    【解决方案1】:

    问题有点模棱两可,但我认为问题主要是因为您设置的颜色来自片段的 onCreateView() 方法,如果 contentMain 布局驻留在包含片段然后您可以在该活动上创建一个方法来更改活动的颜色,而不是片段的onCreateView

    因此您的按钮单击将如下所示::

    (MainActivity)getActivity().changeBgColor(bgGrey);
    

    所以您在此处所做的更改是通过控制所有片段的活动完成的,而不是片段本身。

    希望有帮助,祝你好运。

    【讨论】:

    • 是的,但似乎更改会在返回主要活动时重置。这不会导致同样的事情。我认为可能正在重新创建活动,但无法检查。
    • 没有再次创建的activity,但是将调用fragment之前的activity的状态设置为当前状态,这让你感觉它是重新创建的,保持fragment的框架布局容器的颜色透明并通过在活动中创建公共方法并在单击按钮时调用它来通过活动设置颜色,因此当您退出片段时,活动将具有新的 bg 颜色,因为您通过活动进行了更改。试一次!
    猜你喜欢
    • 2012-07-26
    • 2014-04-09
    • 1970-01-01
    • 2013-04-27
    • 2021-07-05
    • 2021-08-31
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多