Android 更改父活动上的开关按钮后刷新片段

Android 更改父活动上的开关按钮后刷新片段,android,android-fragments,Android,Android Fragments,在我的应用程序中,我使用带有PagerTabStrip的ViewPager,在操作栏上我有一个切换按钮 我想在切换按钮更改为true时,片段上的文本视图的文本已更改…(切换按钮为false时也更改为另一文本) 我的意思是: 以下是我的工作: PagerAdapter: 主要活动: 片段a: 我的问题是它不会立即刷新文本视图 切换到另一个选项卡并返回到主页后,该选项卡已更改, 但我想在切换按钮更改后立即更改 感谢您提供的任何帮助…而不是FragmentPagerAdapter在PagerAda

在我的应用程序中,我使用带有PagerTabStrip的ViewPager,在操作栏上我有一个
切换按钮

我想在
切换按钮
更改为true时,片段上的
文本视图
的文本已更改…
(切换按钮为false时也更改为另一文本)

我的意思是:

以下是我的工作:

PagerAdapter:

主要活动:

片段a:

我的问题是它不会立即刷新文本视图
切换到另一个选项卡并返回到
主页
后,该选项卡已更改, 但我想在<代码>切换按钮更改后立即更改



感谢您提供的任何帮助…

而不是
FragmentPagerAdapter
在PagerAdapter中扩展
FragmentStatePagerAdapter
,并覆盖以下方法

@Override
public int getItemPosition(Object object) {

     return POSITION_NONE;
}
切换按钮时,添加以下代码

pager.setOffscreenPageLimit(2);
pager.getAdapter().notifyDataSetChanged();

注意:这将刷新您的总视图寻呼机。

而不是PagerAdapter中的
FragmentStatePagerAdapter
扩展
FragmentStatePagerAdapter
,并覆盖以下方法

@Override
public int getItemPosition(Object object) {

     return POSITION_NONE;
}
切换按钮时,添加以下代码

pager.setOffscreenPageLimit(2);
pager.getAdapter().notifyDataSetChanged();

注意:这将刷新您的总视图寻呼机。

而不是PagerAdapter中的
FragmentStatePagerAdapter
扩展
FragmentStatePagerAdapter
,并覆盖以下方法

@Override
public int getItemPosition(Object object) {

     return POSITION_NONE;
}
切换按钮时,添加以下代码

pager.setOffscreenPageLimit(2);
pager.getAdapter().notifyDataSetChanged();

注意:这将刷新您的总视图寻呼机。

而不是PagerAdapter中的
FragmentStatePagerAdapter
扩展
FragmentStatePagerAdapter
,并覆盖以下方法

@Override
public int getItemPosition(Object object) {

     return POSITION_NONE;
}
切换按钮时,添加以下代码

pager.setOffscreenPageLimit(2);
pager.getAdapter().notifyDataSetChanged();
注意:这将刷新您的总视图寻呼机。

您应该将您的片段变成一个工具。这个接口定义了当某些首选项被更改时的回调方法,所以您只需要检查它是否是“SWITCH_BTN_ACTION”,然后相应地更改文本

然后,您必须在onCreate()和onPause()方法中注册和取消注册SahredPreferences更改的片段

此外,程序员在SharedReferences键中使用字符串常量也是一种很好的做法。原因是您希望定义这些常量一次,然后在整个代码中使用它们。如果出于某种原因,您必须更改常量的值,那么您只能在一个位置进行更改,否则更改所有代码中的每个字符串文字将非常混乱。这种做法也适用于其他类型的变量(请参阅)

最后你会得出这样的结论:

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");
      }
    }
  }
}
希望这有帮助!:)

你应该把你的碎片变成一个工具。这个接口定义了当某些首选项被更改时的回调方法,所以您只需要检查它是否是“SWITCH_BTN_ACTION”,然后相应地更改文本

然后,您必须在onCreate()和onPause()方法中注册和取消注册SahredPreferences更改的片段

此外,程序员在SharedReferences键中使用字符串常量也是一种很好的做法。原因是您希望定义这些常量一次,然后在整个代码中使用它们。如果出于某种原因,您必须更改常量的值,那么您只能在一个位置进行更改,否则更改所有代码中的每个字符串文字将非常混乱。这种做法也适用于其他类型的变量(请参阅)

最后你会得出这样的结论:

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");
      }
    }
  }
}
希望这有帮助!:)

你应该把你的碎片变成一个工具。这个接口定义了当某些首选项被更改时的回调方法,所以您只需要检查它是否是“SWITCH_BTN_ACTION”,然后相应地更改文本

然后,您必须在onCreate()和onPause()方法中注册和取消注册SahredPreferences更改的片段

此外,程序员在SharedReferences键中使用字符串常量也是一种很好的做法。原因是您希望定义这些常量一次,然后在整个代码中使用它们。如果出于某种原因,您必须更改常量的值,那么您只能在一个位置进行更改,否则更改所有代码中的每个字符串文字将非常混乱。这种做法也适用于其他类型的变量(请参阅)

最后你会得出这样的结论:

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");
      }
    }
  }
}
希望这有帮助!:)

你应该把你的碎片变成一个工具。这个接口定义了当某些首选项被更改时的回调方法,所以您只需要检查它是否是“SWITCH_BTN_ACTION”,然后相应地更改文本

然后,您必须在onCreate()和onPause()方法中注册和取消注册SahredPreferences更改的片段

此外,程序员在SharedReferences键中使用字符串常量也是一种很好的做法。原因是您希望定义这些常量一次,然后在整个代码中使用它们。如果出于某种原因,您必须更改常量的值,那么您只能在一个位置进行更改,否则更改所有代码中的每个字符串文字将非常混乱。这种做法也适用于其他类型的变量(请参阅)

最后你会得出这样的结论:

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");
      }
    }
  }
}

希望这有帮助!:)

试试这个,试试这个,试试这个,哇……真管用。非常感谢你,库努;)只是一个问题,
etOffscreenPageLimit
中的
2
是什么?@Johnny它设置了在空闲状态下应保留到视图层次结构中当前页面任一侧的页面数。因此,如果你写2,那么它将只在当前页面的两侧加载2页。哇……它很有效。非常感谢Kunu;)只是一个问题,
etOffscreenPageLimit
中的
2
是什么?@Johnny它设置了应该设置的页数