我的用户应该能够在我的应用程序中更改(使用首选项)界面的外观(在视觉上动态启用和禁用某些布局)。
我正在使用 v4 ViewPager(确切地说是 PagerTabStrip)并试图在 onResume() 方法中更改它,就在用户关闭“设置菜单”以返回应用程序之后。
我可以通过这种方式更改变量,但似乎无法更改任何布局(我曾经使用 TabHosts,这非常有效)。如果我在 onCreateView() 方法中调用此方法,一切正常,但我不希望我的用户在任何更改可见之前强制关闭应用程序。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = null;
vContainer = container; // global variable
switch (mCurrentPage) {
case 1:
v = inflater.inflate(R.layout.lifepoints_layout,
container, false);
// irrelevant code
InputStyleType = (LinearLayout) v
.findViewById(R.id.llInputEditText);
InputStyleButtons = (TableLayout) v
.findViewById(R.id.tlInputButtons);
InitializePreferences(); // <- this method
break;
case 2:
// irrelevant code
break;
default:
break;
}
return v;
}
这完美地工作,因为它应该。但是,当通过 onResume() 调用代码时,程序崩溃了!
@Override
public void onResume() {
super.onResume();
if (isPaused)
InitializePreferences();
isPaused = false;
}
这是方法本身:
public void InitializePreferences() {
SharedPreferences getPreferences = PreferenceManager
.getDefaultSharedPreferences(getActivity().getBaseContext());
prefInput = getPreferences.getBoolean("pref_input", true);
prefFb = getPreferences.getBoolean("pref_fb", false);
if (prefInput) {
InputStyleType.setVisibility(View.GONE);
InputStyleButtons.setVisibility(View.VISIBLE);
} else {
InputStyleButtons.setVisibility(View.GONE);
InputStyleType.setVisibility(View.VISIBLE);
}
}
我已经尝试了很多,但似乎没有任何效果。除非从 onCreateView 直接调用它,否则我似乎无法更改任何布局,这似乎不正确。
编辑 1
我已经完全分析了我的方法,它被正确调用并且我已经用一些变量进行了测试。一切正常,直到我尝试更改用户可见的内容(祝酒词工作得很好)。
编辑 3
删除了 Edit 2,这就是我的代码目前所在的位置。它仍然无法正常工作,实际上有点混乱。我认为答案并不遥远。
public void InitializePreferences() {
SharedPreferences getPreferences = PreferenceManager
.getDefaultSharedPreferences(getActivity().getBaseContext());
prefInput = getPreferences.getBoolean("pref_input", true);
prefFb = getPreferences.getBoolean("pref_fb", false);
if (isPaused) {
getActivity().getWindow().getDecorView().invalidate();
LayoutInflater inflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.lifepoints_layout, vContainer,
false);
InputStyleType = (LinearLayout) v.findViewById(R.id.llInputEditText);
InputStyleButtons = (TableLayout) v
.findViewById(R.id.tlInputButtons);
InputStyleType.invalidate();
InputStyleButtons.invalidate();
}
if (prefInput) {
InputStyleType.setVisibility(View.GONE);
InputStyleButtons.setVisibility(View.VISIBLE);
} else {
InputStyleButtons.setVisibility(View.GONE);
InputStyleType.setVisibility(View.VISIBLE);
}
}