更改父活动上的切换按钮后刷新片段

时间:2015-09-24 08:41:47

标签: android android-fragments

在我的应用中,我正在使用带有PagerTabStrip的ViewPager,在操作栏上我有一个switch button
我希望当switch button更改为true时,片段上的textview的文本已更改...
(当Switch按钮为false时也会更改为另一个文本)

这就是我的意思:
enter image description here

这就是我的所作所为:

  

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改变之后立即改变......


感谢您提供任何帮助......

2 个答案:

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

希望这有帮助! :)