我的用戶應該能夠在我的應用程序中更改(使用首選項)界面的外觀(動態地啓用和禁用某些佈局)。Android - 無法使用v4更改佈局片段
我正在使用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
刪除編輯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);
}
}
請附上帶有錯誤的日誌貓 – 2013-02-12 22:19:29