java - 如何在 Android 上结束片段上的活动
问题描述
我正在开发一个电影应用程序。
我的问题是这样的:
当我单击电影时,它会显示它的详细信息。在细节上我可以看预告片。当您单击该Watch
按钮时,它将被重定向到YouTube
显示电影预告片的位置。但再次点击另一部电影后,它会直接打开 YouTube,而不是显示其详细信息。
如何完成我创建的重定向到 YouTube 的活动?
我的代码:
电影列表片段
public class MovieListFragment extends Fragment implements OnMovieListener, OnBtnMoreListner {
//Adapter
private MovieListParentApdater movieListParentApdater;
//ViewModel
private MovieListViewModel movieListViewModel;
//ViewBinding
private MovieListFragmentBinding movieListFragmentBinding;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
movieListFragmentBinding = MovieListFragmentBinding.inflate(inflater,container,false);
movieListViewModel = new ViewModelProvider(this).get(MovieListViewModel.class);
configureRecyclerView();
//Calling the observer
observeGendersChange();
return movieListFragmentBinding.getRoot();
}
//Configure RecyclerView
private void configureRecyclerView() {
movieListParentApdater = new MovieListParentApdater(getActivity(),this,this);
movieListFragmentBinding.rvParent.setLayoutManager(new LinearLayoutManager(getContext()));
movieListFragmentBinding.rvParent.setAdapter(movieListParentApdater);
}
//is called on my gridViewAdapter when I click on the image
@Override
public void onMovieClick(MovieModel movie) {
Bundle bundle = new Bundle();
bundle.putParcelable("movie", movie);
Navigation.findNavController(getActivity(),R.id.nav_host_fragment).navigate(R.id.movieDetailsFragment,bundle);
}
电影详情片段
public class MovieDetailsFragment extends Fragment {
//ViewBinding
private MovieDetailsFragmentBinding movieDetailsFragmentBinding;
//ViewModel
private MovieDetailsViewModel movieDetailsViewModel;
//Movie
private MovieModel movie;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
movieDetailsFragmentBinding = MovieDetailsFragmentBinding.inflate(inflater,container,false);
movieDetailsViewModel = new ViewModelProvider(this).get(MovieDetailsViewModel.class);
movieDetailsFragmentBinding.btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Navigation.findNavController(getActivity(), R.id.nav_host_fragment).navigateUp();
}
});
movie = getArguments().getParcelable("movie");
observerUrlVideoMovieChange();
//btn play video
movieDetailsFragmentBinding.btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(movie.getVideo() == null) // if movie hasn't video
movieDetailsViewModel.getUrlVideoMoviesID(movie.getId()); //get url
else
showVideo(movie.getVideo());
}
});
//show details
showDetails();
return movieDetailsFragmentBinding.getRoot();
}
//show trailer movie
private void showVideo(String videoId) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=" + videoId));
startActivity(intent);
}
}
解决方案
不确定这里的确切问题是什么,但我可以看到您正在尝试观察 liveData。有时 liveData 可能会保留旧值,具体取决于生命周期所有者。
要检查是否是这种情况,请尝试注释对 showVideo() 方法的所有其他调用,除了 movieDetailsFragmentBinding.btnPlay.setOnClickListener() 方法中的调用,并删除 if-else 条件。
推荐阅读
- php - 如何更新文件php中的json内容?
- python - pyparsing:迭代文件并在匹配时停止
- symfony - 如何在 symfony 中保存多对多关系表单数据
- c++ - 在 C++ 中的常量评估期间,悬空指针可以等于有效指针吗?
- php - 页面重新加载后,codeigniter 动态传递页面 url 不起作用
- c - 为什么 -nan(ind) 问题出现在我的代码中
- vbscript - 在一行上获取 VBscript 结果
- grpc - Python GRPC 客户端到具有不同 IP 地址的远程服务器
- javascript - vuetify 在另一个函数运行时显示“v-progress-linear”
- amazon-web-services - AWS 仅允许对端口 80 进行健康检查