在我的应用中,我正在使用带有PagerTabStrip的ViewPager,在操作栏上我有一个switch button
。
我希望当switch button
更改为true时,片段上的textview
的文本已更改...
(当Switch按钮为false时也会更改为另一个文本)
这就是我的意思:
这就是我的所作所为:
PagerAdapter:
public class PagerAdapter extends FragmentPagerAdapter {
public PagerAdapter(Context context, FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Home";
case 1:
return "Test";
default:
return "Home";
}
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentA();
case 1:
return new FragmentB();
default:
return new FragmentA();
}
}
@Override
public int getCount() {
return 2;
}
}
主要活动:
switch_button_action.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
boolean State=switch_button_action.isChecked();
if (State){
SharedPreferences.Editor editor = G.preferences.edit();
editor.putBoolean("SWITCH_BTN_ACTION", true);
editor.commit();
}
else{
SharedPreferences.Editor editor = G.preferences.edit();
editor.putBoolean("SWITCH_BTN_ACTION", false);
editor.commit();
}
}
});
FragmentA:
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
layout=inflater.inflate(R.layout.fragment_a, null);
boolean GetStateSwitchBtnAction =G.preferences.getBoolean("SWITCH_BTN_ACTION", false);
if(GetStateSwitchBtnAction){
textview.settext("test");
}
else{
textview.settext("TEST")
}
return layout;
}
我的问题是它不会立即刷新TextView!
在切换到另一个标签并回到Home
之后,它已被更改,
但是我希望在switch button
改变之后立即改变......
感谢您提供任何帮助......
答案 0 :(得分:2)
而不是FragmentPagerAdapter
在PagerAdapter中扩展FragmentStatePagerAdapter
并覆盖以下方法
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
并在切换按钮时添加以下代码
pager.setOffscreenPageLimit(2);
pager.getAdapter().notifyDataSetChanged();
注意:这会刷新您的整个视图寻呼机。
答案 1 :(得分:1)
您应该使 FragmentA 实施SharedPreferences.OnSharedPreferenceChangeListener。此接口定义了某些首选项更改时的回调方法,因此您只需检查它是否为" SWITCH_BTN_ACTION",然后相应地更改文本。
然后,您必须在 onCreate()和 onPause()方法中注册和取消注册 SahredPreferences 更改的片段。
此外,对于 SharedPreferences 键,使用String常量是一个很好的程序员实践。原因是你想要定义一次这些常量,并在代码中使用它们。如果由于某种原因你必须改变常量的值,你只能在一个地方执行它,否则在所有代码中更改每个字符串文字会非常麻烦。这种做法也适用于其他类型的变量(见this)。
最后你想出了类似的东西:
public class FragmentA extends Fragment implements
SharedPreferences.OnSharedPreferenceChangeListener {
public static final String SWITCH_PREF_KEY = "SWITCH_BTN_ACTION";
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
layout=inflater.inflate(R.layout.fragment_a, null);
boolean GetStateSwitchBtnAction = G.preferences.getBoolean(SWITCH_PREF_KEY, false);
if(GetStateSwitchBtnAction){
textview.settext("test");
}
else{
textview.settext("TEST");
}
return layout;
}
@Override public void onResume() {
super.onResume();
G.preferences.registerOnSharedPreferenceChangeListener(this);
}
@Override public void onPause() {
super.onPause();
G.preferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals(SWITCH_PREF_KEY)) {
if(sharedPreferences.getBoolean(SWITCH_PREF_KEY)) {
textview.settext("test");
}
else{
textview.settext("TEST");
}
}
}
}
希望这有帮助! :)