我正在尝试通过设置页面更改整个应用程序的背景颜色,我搜索了很长时间,到目前为止找不到解决方案。
因此,在片段中我有一个按钮,它充当切换。单击背景颜色时,可以互换,从白色到灰色。
这是按钮的逻辑:
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 覆盖方法内部负责更改背景颜色,它确实如此。单击按钮后,它会改变。
但是... 当按下后退按钮返回到后台的前一个屏幕时,背景变为白色,如果我再次进入设置页面它是灰色的,并且在按下后再次变为白色。
好像只有片段的背景发生了变化,但布局 contentLayout 只存在于mainLayout而不是片段上。
我怀疑在调用片段生命周期方法时正在重置背景,但我不知道如何使其保持不变,因为按下的后退按钮上没有保存任何实例。
反正。以下是更改背景的逻辑,包括重写方法:
@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 中进行此操作,但会遇到相同的结果。请帮帮我。
干杯。
答案 0 :(得分:0)
问题有点模糊,但我认为问题主要是因为您设置的颜色来自片段的onCreateView()
方法,如果contentMain
布局驻留在保存片段的活动然后您可以在该活动上创建一个方法,该方法更改活动的颜色而不是片段的onCreateView
。
因此,按钮点击将如下所示::
(MainActivity)getActivity().changeBgColor(bgGrey);
因此,您在此处所做的更改是通过控制所有片段而非片段本身的活动完成的。
希望有所帮助,祝你好运。