java - 将实时数据从 Viewpager Fragment 共享到 Activity

标签 java android android-fragments viewmodel

我的 fragment 中有带有播放按钮的 fragment 。每当用户按下 ViewPager fragment 中的播放按钮时,它就会调用主机 Activity 中的一个函数来播放播放器。

我尝试使用 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;
    }
}

这是 View 模型函数

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);

注意我已经尝试查找预定义的解决方案,但没有找到任何内容。

最佳答案

为此目的,您实际上不必拥有 ViewModel。您可能只考虑在托管 FragmentsActivity 中使用 public 函数。例如,让我们假设您的 PlayerActivity 中有以下 public 函数,它启动所有其他 fragment 。

public void play(String songName) {
    viewModel.getIsPlaying().setValue(true);
    viewModel.getCheck().setValue("Checking");
    // Other actions for playing
}

现在,您可能只需考虑以下 onClick 函数,而不是您现在拥有的函数。

playBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ((PlayerActivity) getActivity()).play(songName);
    }
});

希望有帮助!

关于java - 将实时数据从 Viewpager Fragment 共享到 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55037579/

相关文章:

android - 在 Flutter 中打开 Google Photos 之前,Multi Image Picker 无法找到我的图像

android - 让表在 fragment 中,错误是在空对象引用上

android - 在 ViewPager 中使用具有相同布局的不同 fragment

java - 谷歌登录 fragment 中出现错误,W/IInputConnectionWrapper(20367) : showStatusIcon on inactive InputConnection

java - 合金 UI 时间格式 24 小时 Liferay 6

java - 如何为 API 23、19 及以下版本制作重复警报

android - 在 Android 应用程序中接受付款

java - 发现 Java 程序启动错误?

java - Android - 更新数组列表时的线程安全

android - 使用自定义 View 填充非常长的线性布局,非常慢