How to end an activity on a fragment on Android

Viewed 56

I am developing a movie application.

My problem is this:

When I click on the movie, it shows the details of it. In the details I can watch the trailer. When you click the Watch button, it will be redirected to YouTube, where the movie trailer is displayed. But after clicking on another movie again, it opens YouTube directly instead of showing its details.

How can I finish the activity I created to redirect to YouTube?

My code:

MovieListFragment

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

MovieDetailsFragment

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

}

Link Video

1 Answers

Not sure what's the exact issue here but I can see you're trying to observe a liveData. Sometimes liveData may hold an old value depending on the lifecycle owner.

To check whether this is the case, try commenting all the other calls to showVideo() method except the one in movieDetailsFragmentBinding.btnPlay.setOnClickListener() method and remove if-else condition as well.

Related