You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在电影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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:03:23