java - 如何将所选电影的数据获取到detailActivity,然后获取到detail Activity中的 fragment ?

标签 java android

  1. NowShowingFragment.java

       nowShowingAdapter = new NowShowingAdapter(nowShowingMovieList, new AdapterView.OnItemClickListener() {
                            @Override
                            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                                Intent intent = new Intent(mContext, MovieDetailActivity.class);
                                    intent.putExtra("movie",nowShowingMovieList.get(position));
                                    startActivity(intent);
    
  2. 它导致详细 Activity (MovieDetailActivity.java)

            private Movie selectedMovie ;
    
    
                selectedMovie = (Movie) getIntent().getSerializableExtra("movie");
    
                int movieId = selectedMovie.getMovieId();
    
    
                Bundle bundle = new Bundle();
                bundle.putString("language", selectedMovie.getMovieLanguage());
                bundle.putString("duration", selectedMovie.getMovieDuration());
                bundle.putString("director", selectedMovie.getMovieDirector());
                bundle.putString("genre", selectedMovie.getMovieGenre());
                bundle.putString("description", selectedMovie.getMovieDescription());
                bundle.putSerializable("selected", selectedMovie);
    
                // set MyFragment Arguments
                NowShowingFragment movieObject = new NowShowingFragment();
                movieObject.setArguments(bundle);
    
  3. 它包含 3 个 fragment ,它们是: i) MovieInformationFragment.java

        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
                super.onViewCreated(view, savedInstanceState);
    
                tvMovieLanguage = view.findViewById(R.id.tvMovieLanguage);
                tvMovieGenre = view.findViewById(R.id.tvMovieGenre);
                tvMovieDirector = view.findViewById(R.id.tvMovieDirector);
                tvMovieDuration = view.findViewById(R.id.tvMovieDuration);
    
                tvMovieLanguage.setText(this.getArguments().getString("language"));
                tvMovieGenre.setText(this.getArguments().getString("genre"));
                tvMovieDirector.setText(this.getArguments().getString("director"));
                tvMovieDuration.setText(this.getArguments().getString("duration"));
    

ii)MovieDescriptionFragment.java 它包含电影的故事情节。

        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

            tvMovieDescription = view.findViewById(R.id.tvMovieDescription);

            tvMovieDescription.setText(this.getArguments().getString("description"));

        }

iii)MovieCastFragment.java 它包含所选电影的 Actor 图像和名称。

        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

            mContext = getContext();
            progressBar = view.findViewById(R.id.progressBar);
            rvMoviecast = view.findViewById(R.id.rvMoviecast);

            Serializable castArray = getArguments().getSerializable("selectedMovie");

        }

MovieCastFragment 由 MovieCastAdapter 组成,因为我在其中使用了回收器 View 。

    @Override
    public void onBindViewHolder(@NonNull movieCastHolder holder, int position) {

        Context context = holder.itemView.getContext();

        Picasso.get().load(dataset.get(position).getActorImage()).placeholder(R.drawable.image_placeholder).into(holder.ivActorImage);
        holder.tvActorName.setText(dataset.get(position).getActorName());


    }

所有这些 fragment 均由 MovieDetailPagerAdapter.java 管理,我已将其代码发布如下:

            public Fragment getItem(int position) {
                if (position==0){
                    return new MovieInfromationFragment();
                }else if(position==1){
                    return new MovieCastFragment();
                }else if(position==2){
                    return new MovieDescriptionFragment();
                }
                return null;
            }

最佳答案

您可以使用 Retrofit 获取数据并将其存储在 MoviesData 列表中,并在 DetailActivity 中显示特定电影的详细信息,将该电影对象作为额外内容传递给该 Activity 。就像这样:

Intent intent = new Intent(this, ItemDetailActivity.class);
intent.putExtra("selectedMovie", selectedMovie);
startActivity(intent);

这里,selectedMovie是你想要在DetailActivity中显示的电影对象。

然后要将电影细节分享到 fragment ,请尝试以下操作:

Bundle arguments = new Bundle();
arguments.putParcelable("selectedMovie", selectedMovie);
MovieDetailFragment fragment = new MovieDetailFragment();
fragment.setArguments(arguments);
this.getSupportFragmentManager().beginTransaction()
       .replace(R.id.movie_detail_container, fragment)
       .commit();

希望它对您有用!

关于java - 如何将所选电影的数据获取到detailActivity,然后获取到detail Activity中的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62389746/

相关文章:

java - 使用逻辑或时在 Java 正则表达式中正确使用匹配器组

android - 在 Android Emulator 中,如何知道是否发生振动?

java - Apache Camel : Call to . bean 未将对象保存在数据库中

java - NotificationCompat.BigPictureStyle 可以获取图片显示

android - 意外的顶级异常 : in Android Studio

java - 从布局看

android - 如何在 Manifest.json 中设置 minSdkVersion (Android/Ionic)

java - 如何从 eclipse 获取 .java 文件

java - 在 c3p0 连接池中设置 SQLite 连接属性

java - Rabbitmq 在 Storm 拓扑中创建新连接时阻塞