【问题标题】:Refresh fragment after change of switch button on the parent activity更改父活动上的切换按钮后刷新片段
【发布时间】:2015-09-24 17:18:44
【问题描述】:

在我的应用程序中,我使用带有 PagerTabStrip 的 ViewPager,在操作栏上我有一个 switch button
我想当 switch button 更改为 true,片段上的 textview 的文本,更改...
(当切换按钮为 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();
                }
            }
        });

片段A:

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


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

【问题讨论】:

标签: android android-fragments


【解决方案1】:

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

@Override
public int getItemPosition(Object object) {

     return POSITION_NONE;
}

在切换按钮时添加以下代码

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

注意:这将刷新您的总浏览量寻呼机。

【讨论】:

  • 哇...它有效。非常感谢 Kunu ;) 只是一个问题,etOffscreenPageLimit 中的 2 是什么?
  • @Johnny 它设置在空闲状态下视图层次结构中当前页面的任一侧应保留的页面数。所以如果你写 2 那么它只会在当前页面的两侧加载 2 个页面。
【解决方案2】:

你应该让你的FragmentA实现SharedPreferences.OnSharedPreferenceChangeListener。该接口定义了某些偏好发生变化时的回调方法,因此您只需检查是否为“SWITCH_BTN_ACTION”,然后相应地更改文本即可。

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

此外,对 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");
      }
    }
  }
}

希望这会有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多