Android開發 - Movie 類詳解

阿俊学JAVA發表於2024-08-05

基本結構

  • Movie類應該包含電影的基本資訊。假設我們需要儲存以下資訊

    • 電影標題(title)

    • 電影描述(description)

    • 釋出年份(releaseYear)

    • 評分(rating)

    • 海報URL(posterUrl)

  • 我們將為這些屬性建立一個

建立Movie類

  • 首先定義Movie類並新增相應的屬性構造方法getter/setter方法

    public class Movie {
        // 電影標題
        private String title;
        // 電影描述
        private String description;
        // 釋出年份
        private int releaseYear;
        // 評分
        private double rating;
        // 海報URL
        private String posterUrl;
    
        // 構造方法,用於初始化Movie物件
        public Movie(String title, String description, int releaseYear, double rating, String posterUrl) {
            this.title = title; // 設定電影標題
            this.description = description; // 設定電影描述
            this.releaseYear = releaseYear; // 設定釋出年份
            this.rating = rating; // 設定評分
            this.posterUrl = posterUrl; // 設定海報URL
        }
    
        // 獲取電影標題
        public String getTitle() {
            return title;
        }
    
        // 設定電影標題
        public void setTitle(String title) {
            this.title = title;
        }
    
        // 獲取電影描述
        public String getDescription() {
            return description;
        }
    
        // 設定電影描述
        public void setDescription(String description) {
            this.description = description;
        }
    
        // 獲取釋出年份
        public int getReleaseYear() {
            return releaseYear;
        }
    
        // 設定釋出年份
        public void setReleaseYear(int releaseYear) {
            this.releaseYear = releaseYear;
        }
    
        // 獲取評分
        public double getRating() {
            return rating;
        }
    
        // 設定評分
        public void setRating(double rating) {
            this.rating = rating;
        }
    
        // 獲取海報URL
        public String getPosterUrl() {
            return posterUrl;
        }
    
        // 設定海報URL
        public void setPosterUrl(String posterUrl) {
            this.posterUrl = posterUrl;
        }
    }
    

Movie類的使用

  • 建立 Movie 物件的例項以及設定其屬性

    // 建立一個Movie物件例項
    Movie inception = new Movie(
        "Inception", // 電影標題
        "A thief who steals corporate secrets through the use of dream-sharing technology is given the inverse task of planting an idea into the mind of a C.E.O.", // 電影描述
        2010, // 釋出年份
        8.8, // 評分
        "https://example.com/inception_poster.jpg" // 海報URL
    );
    
  • 顯示電影資訊

    • 在實際的 Android 應用中,我們通常會從 API 獲取電影資訊,並將這些資訊顯示在 UI 上。以下是一個簡單的示例,演示如何在 RecyclerView 中顯示電影列表

      • 建立主佈局檔案定義一個 RecyclerView 用於顯示電影列表res/layout/activity_main.xml

        <!-- res/layout/activity_main.xml -->
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
        
            <!-- 定義一個RecyclerView,用於顯示電影列表 -->
            <RecyclerView
                android:id="@+id/recyclerView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="16dp"
                android:scrollbars="vertical" />
        </LinearLayout>
        
      • 建立電影項佈局檔案定義每個電影項在 RecyclerView 中的顯示方式res/layout/item_movie.xml

        <!-- res/layout/item_movie.xml -->
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="16dp">
        
            <ImageView
                android:id="@+id/posterImageView"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:scaleType="centerCrop" />
        
            <TextView
                android:id="@+id/titleTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="18sp"
                android:textStyle="bold"
                android:paddingTop="8dp" />
        
            <TextView
                android:id="@+id/descriptionTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="14sp"
                android:paddingTop="4dp" />
        
            <TextView
                android:id="@+id/releaseYearTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:paddingTop="4dp" />
        
            <TextView
                android:id="@+id/ratingTextView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="12sp"
                android:paddingTop="4dp" />
        </LinearLayout>
        
      • 建立 RecyclerView.Adapter 類來繫結 Movie 資料MovieAdapter.java

        public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.MovieViewHolder> {
            // 電影列表
            private List<Movie> movieList;
        
            // 構造方法,傳入電影列表
            public MovieAdapter(List<Movie> movieList) {
                this.movieList = movieList; // 初始化電影列表
            }
        
            // 建立 ViewHolder
            @Override
            public MovieViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                // 載入電影項佈局
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_movie, parent, false);
                return new MovieViewHolder(view); // 建立並返回 ViewHolder
            }
        
            // 繫結 ViewHolder
            @Override
            public void onBindViewHolder(MovieViewHolder holder, int position) {
                Movie movie = movieList.get(position); // 獲取當前電影
                holder.bind(movie); // 繫結電影資料到 ViewHolder
            }
        
            // 獲取電影列表大小
            @Override
            public int getItemCount() {
                return movieList.size();
            }
            // 以上設定了形參的傳參規則
        
            // 以下自定義 ViewHolder 類:包含具體的實現方法
            public static class MovieViewHolder extends RecyclerView.ViewHolder {
                // 定義 UI 元素
                private TextView titleTextView;
                private TextView descriptionTextView;
                private TextView releaseYearTextView;
                private TextView ratingTextView;
                private ImageView posterImageView;
        
                // 構造方法,初始化 UI 元素
                public MovieViewHolder(View itemView) {
                    super(itemView);
                    titleTextView = itemView.findViewById(R.id.titleTextView); // 電影標題 TextView
                    descriptionTextView = itemView.findViewById(R.id.descriptionTextView); // 電影描述 TextView
                    releaseYearTextView = itemView.findViewById(R.id.releaseYearTextView); // 釋出年份 TextView
                    ratingTextView = itemView.findViewById(R.id.ratingTextView); // 評分 TextView
                    posterImageView = itemView.findViewById(R.id.posterImageView); // 海報 ImageView
                }
        
                // 繫結電影資料到 UI 元素
                public void bind(Movie movie) {
                    titleTextView.setText(movie.getTitle()); // 設定電影標題
                    descriptionTextView.setText(movie.getDescription()); // 設定電影描述
                    releaseYearTextView.setText(String.valueOf(movie.getReleaseYear())); // 設定釋出年份
                    ratingTextView.setText(String.valueOf(movie.getRating())); // 設定評分
                    // 載入海報圖片,可以使用 Glide 或 Picasso 庫
                    Glide.with(itemView.getContext()).load(movie.getPosterUrl()).into(posterImageView); // 載入海報圖片
                }
            }
        }
        
      • 啟動類中設定 RecyclerView:在 ActivityFragment設定 RecyclerView,並繫結 MovieAdapter

        public class MainActivity extends AppCompatActivity {
            // RecyclerView 物件
            private RecyclerView recyclerView;
            // MovieAdapter 物件
            private MovieAdapter movieAdapter;
            // 電影列表
            private List<Movie> movieList;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main); // 設定佈局檔案
        
                recyclerView = findViewById(R.id.recyclerView); // 獲取 RecyclerView 物件
                recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 設定佈局管理器
        
                movieList = new ArrayList<Movie>(); // 初始化電影列表
                // 新增一些示例電影資料
                movieList.add(new Movie("Inception", "A thief who steals corporate secrets...", 2010, 8.8, "https://example.com/inception_poster.jpg"));
                movieList.add(new Movie("The Dark Knight", "When the menace known as the Joker emerges...", 2008, 9.0, "https://example.com/dark_knight_poster.jpg"));
                
                movieAdapter = new MovieAdapter(movieList); // 初始化 MovieAdapter
                recyclerView.setAdapter(movieAdapter); // 設定 Adapter
            }
        }
        
    • 以上是一個基本的示例,實際應用中可以根據需求進行擴充套件最佳化,例如從 API 獲取資料實現搜尋功能

相關文章