在电影App的TabLayout中传递图片Url与fileUrl时出现错误求助
电影App中TabLayout传递图片URL与fileUrl数据报错问题
我在电影App的TabLayout中传递图片Url与fileUrl数据时遇到错误,以下是相关代码及修复方案:
MainActivity代码
public class MainActivity extends AppCompatActivity { BannerMoviesPagerAdapter bannerMoviesPagerAdapter; TabLayout tabLayout; // 原代码误写为TableLayout,已修正 ViewPager bannerMoviesViewPager; List<BannerMovies> bannerMoviesList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bannerMoviesList = new ArrayList<>(); // 修复:Java不支持Kotlin式命名参数,按构造函数顺序传参 bannerMoviesList.add(new BannerMovies(1, "Sharkula", "https://img.yts.mx/assets/images/movies/sharkula_2022/medium-cover.jpg", "https://youtu.be/6SOEYXZK6Q4")); bannerMoviesList.add(new BannerMovies(2, "test", "https://img.yts.mx/assets/images/movies/looking_for_jackie_2009/medium-cover.jpg", "https://www.youtube.com/watch?v=ByYWL1SEe-k")); bannerMoviesList.add(new BannerMovies(3, "test", "https://sdmoviespoint.mba/wp-content/uploads/2022/07/Khuda-Haafiz-Chapter-II-Agni-Pariksha-2022-Full-Movie-Download-Free.jpg", "https://www.youtube.com/watch?v=ByYWL1SEe-k")); // 修复:添加适配器初始化调用,否则ViewPager无法加载数据 setBannerMoviesPagerAdapter(bannerMoviesList); } private void setBannerMoviesPagerAdapter(List<BannerMovies> bannerMoviesList){ bannerMoviesViewPager = findViewById(R.id.banner_viewPager); bannerMoviesPagerAdapter = new BannerMoviesPagerAdapter(this, bannerMoviesList); bannerMoviesViewPager.setAdapter(bannerMoviesPagerAdapter); } }
BannerMoviesPagerAdapter代码
public class BannerMoviesPagerAdapter extends PagerAdapter { Context context; List<BannerMovies> bannerMoviesList; public BannerMoviesPagerAdapter(Context context, List<BannerMovies> bannerMoviesList) { this.context = context; this.bannerMoviesList = bannerMoviesList; } @Override public int getCount() { return bannerMoviesList.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { // 修复:加载布局时传入父容器,避免布局参数失效 View view = LayoutInflater.from(context).inflate(R.layout.banner_movie_layout, container, false); ImageView bannerImage = view.findViewById(R.id.banner_image); BannerMovies currentMovie = bannerMoviesList.get(position); Glide.with(context).load(currentMovie.getImageUrl()).into(bannerImage); // 添加点击事件,实现fileUrl数据传递(示例:跳转播放页面) view.setOnClickListener(v -> { String fileUrl = currentMovie.getFileUrl(); // 此处可添加跳转逻辑,如启动播放Activity并传递fileUrl // Intent intent = new Intent(context, MoviePlayerActivity.class); // intent.putExtra("FILE_URL", fileUrl); // context.startActivity(intent); }); container.addView(view); return view; } }
BannerMovies实体类代码
public class BannerMovies { Integer id; String movieName; String imageUrl; String fileUrl; public BannerMovies(Integer id, String movieName, String imageUrl, String fileUrl) { this.id = id; this.movieName = movieName; this.imageUrl = imageUrl; this.fileUrl = fileUrl; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMovieName() { return movieName; } public void setMovieName(String movieName) { this.movieName = movieName; } public String getImageUrl() { return imageUrl; } public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; } public String getFileUrl() { return fileUrl; } public void setFileUrl(String fileUrl) { this.fileUrl = fileUrl; } }
核心错误修复点
- 构造函数传参错误:Java不支持
new BannerMovies(id:1, ...)这类命名参数写法,必须严格按实体类构造函数的参数顺序传值。 - 未初始化适配器:原代码未调用
setBannerMoviesPagerAdapter方法,导致ViewPager无法绑定数据。 - 布局加载问题:LayoutInflater加载布局时传入父容器,避免布局参数失效。
- 控件类型笔误:原代码将
TabLayout误写为TableLayout,已修正。
内容的提问来源于stack exchange,提问作者KURONICZ STUDIO
相关产品推荐
相关产品推荐

