【发布时间】:2015-03-10 10:32:29
【问题描述】:
在FragmentPageradapter 我有 3 个片段。在前两个片段中有一个SeekBar。当SeekBar 中的任何一个更改其在fragment1 中的值时,我想更改SeekBar 的值,它位于fragment2 中。我怎样才能实现它?
【问题讨论】:
标签: android fragment fragmentpageradapter
在FragmentPageradapter 我有 3 个片段。在前两个片段中有一个SeekBar。当SeekBar 中的任何一个更改其在fragment1 中的值时,我想更改SeekBar 的值,它位于fragment2 中。我怎样才能实现它?
【问题讨论】:
标签: android fragment fragmentpageradapter
解决方法如下:
首先创建一个接口
public interface SeekChangeInterface {
public void sendChangedValue(int value)
}
在 FragmentPagerAdapter 所属的 Activity 中实现它
在第一个片段中创建接口对象
SeekChangeInterface mSeekChangeInterface;
在第一个片段中声明onAttach()
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mSeekChangeInterface = (SeekChangeInterface )activity;
}
在搜索栏更改监听器调用
mSeekChangeInterface.sendChangedValue(valueofseekbar)
在第二个片段中创建一个方法
public void setSeekBarValue(int progress){
seekBar.setProgress(progress);
}
从ActivitysendChangedValue()调用这个方法
public void sendChangedValue(int progress){
objectoffragnentpageradapter.getItem(1).setSeekBarValue(progress);
}
希望对你有帮助
【讨论】:
不要持有对片段的引用并尝试以这种方式更新它。片段可能为空,或尚未附加。
尝试使用活动。在您的活动中实现一个设置器,并在搜索栏更改侦听器中使用它来设置当前值。 在另一个片段中使用活动来恢复值。
类似:
((MyActivity) getActivity()).setSeekValue(40);
((MyActivity) getActivity()).getSeekValue();
请注意,这不是一个完美的解决方案,因为活动也可以为空(添加空检查)并且您必须强制转换为 MyActivity。但我认为这是一个可用的快速解决方案。
希望对你有帮助
【讨论】:
一种方法是让您的活动负责通信,这意味着当搜索栏发生变化时,片段应该执行以下操作:
((YourActivity) getActivity()).notifySeekBarValueChanged(int);
在你的活动中
private void notifySeekBarValueChanged(int value) {
MyFragment frag = getSupportFragmentManager().findFragmentById(int);
frag.seekBarValueChangedTo(value);
}
【讨论】: