我的片段中有带有播放按钮的片段。每当用户按下ViewPager
片段中的播放按钮时,它都会在主持人活动中调用播放播放器的功能。
我正在尝试使用ViewModel
来实现实时数据,但是没有成功。
public class SlidePlayerFragment extends Fragment {
private MyViewModel viewModel;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View view = inflater.inflate(R.layout.fragment_slide_player, container, false);
ImageView playBtn = view.findViewById(R.id.playBtn);
playBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewModel.getIsPlaying().setValue(true);
viewModel.getCheck().setValue("Checking");
}
});
return view;
}
}
}
这是我的PagerAdapter
public class MyViewPagerAdapter extends FragmentStatePagerAdapter {
private int pages;
public MyViewPagerAdapter(FragmentManager fm,int count) {
super(fm);
pages = count;
}
@Override
public Fragment getItem(int i) {
return new SlidePlayerFragment();
}
@Override
public int getCount() {
return pages;
}
}
这是视图模型功能
private MutableLiveData<Boolean> isPlaying;
public MutableLiveData<Boolean> getIsPlaying() {
if (isPlaying == null)
isPlaying = new MutableLiveData<>();
Log.d("TAG","Checking "+isPlaying.getValue());
return isPlaying;
}
这是观察者部分
final Observer<Boolean> isPlaying= isPlaying -> {
//code here if playing then do some task here
};
viewModel.getIsPlaying().observe(this,isPlaying);
注意,我已经尝试找到预定义的解决方案,但没有找到任何东西。
答案 0 :(得分:0)
为此,您实际上不必具有ViewModel
。您可能只考虑在托管public
的{{1}}中拥有Activity
函数。例如,让我们考虑一下您的Fragments
中具有以下public
函数,它将启动所有其他片段。
PlayerActivity
现在,您可能只考虑使用以下public void play(String songName) {
viewModel.getIsPlaying().setValue(true);
viewModel.getCheck().setValue("Checking");
// Other actions for playing
}
函数,而不是现在使用的函数。
onClick
希望有帮助!
答案 1 :(得分:0)
您还可以设置播放功能公共静态
您的代码显示如下
public static void play() {
// actions for playing
}
并调用此函数,如
playBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
YourActivityName.play();
}
});
希望对您有帮助!
谢谢。