首页 > 解决方案 > 如何在 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);
    }

}

链接视频

标签: javaandroidandroid-intentfragment

解决方案


不确定这里的确切问题是什么,但我可以看到您正在尝试观察 liveData。有时 liveData 可能会保留旧值,具体取决于生命周期所有者。

要检查是否是这种情况,请尝试注释对 showVideo() 方法的所有其他调用,除了 movieDetailsFragmentBinding.btnPlay.setOnClickListener() 方法中的调用并删除 if-else 条件。


推荐阅读