从Viewpager片段到活动共享实时数据

问题描述 投票:1回答:2

我的片段中有一个带有播放按钮的片段。每当用户按下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);

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

java android android-fragments viewmodel
2个回答
0
投票

你真的不需要为此目的有一个ViewModel。您可能只考虑在public中使用Activity函数。例如,让我们考虑在Fragments中有以下public函数,它们会启动所有其他片段。

PlayerActivity

现在,您可能只考虑以下public void play(String songName) { viewModel.getIsPlaying().setValue(true); viewModel.getCheck().setValue("Checking"); // Other actions for playing } 函数而不是您现在拥有的函数。

onClick

希望有所帮助!


0
投票

您还可以使您的播放功能公共静态

您的代码显示如下

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

并调用此函数

public static void play() {
    // actions for playing
}

希望能帮到你!

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.