在 FragmentPagerAdapter 中的 Fragment 之间传递值

Passing values between Fragments in FragmentPagerAdapter

FragmentPageradapter 我有 3 个片段。在前两个片段中有一个 SeekBar。当 SeekBar 中的任何一个更改其在 fragment1 中的值时,我想更改 fragment2 中的 SeekBar 的值。我怎样才能实现它?

不要保留对该片段的引用并尝试以这种方式更新它。该片段可能为空,或尚未附加。

尝试使用Activity。在 activity 中实现 setter 并在搜索栏更改侦听器中使用它来设置当前值。 在另一个片段中使用 activity 恢复值。

类似于:

((MyActivity) getActivity()).setSeekValue(40);
((MyActivity) getActivity()).getSeekValue();

请注意,这不是一个完美的解决方案,因为 activity 也可以为空(添加空检查)并且您必须转换为 MyActivity。但我认为这是一个可用的快速解决方案。

希望对您有所帮助

一种方法是让您的 activity 负责通信,这意味着当搜索栏发生变化时,片段应该执行如下操作:

((YourActivity) getActivity()).notifySeekBarValueChanged(int);

在你的activity

private void notifySeekBarValueChanged(int value) {
    MyFragment frag = getSupportFragmentManager().findFragmentById(int);
    frag.seekBarValueChangedTo(value);
}

另一种方法是在片段之间使用某种消息传递机制,例如 EventBus or Otto

解决方法如下:

  1. 首先创建一个接口

    public interface SeekChangeInterface {
        public void sendChangedValue(int value)
    }
    
  2. FragmentPagerAdapter 所属的 Activity 中实施

  3. 在第一个片段中创建一个接口对象

    SeekChangeInterface  mSeekChangeInterface;
    
  4. 在第一个片段中声明onAttach()

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    
        mSeekChangeInterface = (SeekChangeInterface )activity;
    }
    
  5. 在搜索栏中更改监听器调用

    mSeekChangeInterface.sendChangedValue(valueofseekbar)
    
  6. 在第二个片段中创建一个方法

    public void setSeekBarValue(int progress){
        seekBar.setProgress(progress);
    }
    
  7. 从 Activity sendChangedValue()

    中调用此方法
     public void sendChangedValue(int progress){
         objectoffragnentpageradapter.getItem(1).setSeekBarValue(progress);
     }
    

希望对您有所帮助