Skip to content

Most visited

Recently visited

navigation

Tạo Danh sách và Thẻ

Để tạo danh sách và thẻ phức tạp bằng phong cách material design trong ứng dụng của mình, bạn có thể sử dụng widget RecyclerViewCardView .

Tạo Danh sách

Widget RecyclerView là một phiên bản nâng cao và linh hoạt hơn của ListView. Widget này là một bộ chứa để hiển thị các tập dữ liệu lớn có thể được cuộn rất hiệu quả bằng cách duy trì một số dạng xem hữu hạn. Sử dụng widget RecyclerView khi bạn có các bộ sưu tập dữ liệu với phần tử thay đổi vào thời gian chạy dựa vào hành động của người dùng hoặc sự kiện mạng.

Lớp RecyclerView đơn giản hóa việc hiển thị và xử lý các tập dữ liệu lớn bằng cách cung cấp:

Bạn cũng có sự linh hoạt để định nghĩa các trình quản lý bố trí tùy chỉnh và hoạt hình cho widget RecyclerView.

Hình 1. Widget RecyclerView.

Để sử dụng widget RecyclerView, bạn phải quy định một trình điều hợp và trình quản lý bố trí. Để tạo một trình điều hợp, hãy mở rộng lớp RecyclerView.Adapter. Chi tiết của triển khai phụ thuộc vào các chỉ định của tập dữ liệu của bạn và kiểu dạng xem. Để biết thêm thông tin, hãy xem ví dụ bên dưới.

Hình 2 - Danh sách với RecyclerView.

Trình quản lý bố trí sẽ định vị các dạng xem mục bên trong RecyclerView và xác định thời điểm sử dụng lại các dạng xem mục không còn hiển thị trước người dùng nữa. Để sử dụng lại (hoặc tái chế) một dạng xem, trình quản lý bố trí có thể yêu cầu trình điều hợp thay thế nội dung của dạng xem bằng một phần tử khác từ tập dữ liệu. Tái chế dạng xem bằng cách này sẽ cải thiện hiệu năng nhờ tránh tạo những dạng xem không cần thiết hoặc thực hiện tra cứu findViewById() tốn kém.

RecyclerView cung cấp những trình quản lý bố trí dựng sẵn sau:

Để tạo một trình quản lý bố trí tùy chỉnh, hãy mở rộng lớp RecyclerView.LayoutManager.

Hoạt hình

Hoạt hình để thêm và loại bỏ mục được kích hoạt theo mặc định trong RecyclerView. Để tùy chỉnh những hoạt hình này, hãy mở rộng lớp RecyclerView.ItemAnimator và sử dụng phương thức RecyclerView.setItemAnimator() .

Ví dụ

Ví dụ đoạn mã sau minh họa cách thêm RecyclerView vào bố trí:

<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Sau khi thêm widget RecyclerView vào bố trí của bạn, hãy lấy một núm điều tác tới đối tượng, kết nối nó với một trình quản lý bố trí và gắn kèm một trình điều hợp cho dữ liệu cần được hiển thị:

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}

Trình điều hợp cung cấp truy cập vào các mục trong tập dữ liệu của bạn, tạo dạng xem cho mục và thay thế nội dung của một số dạng xem bằng mục dữ liệu mới khi mục ban đầu không còn hiển thị. Ví dụ đoạn mã sau đây thể hiện việc triển khai đơn giản của tập dữ liệu bao gồm một mảng xâu được hiển thị bằng widget TextView:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

Hình 3. Ví dụ thẻ.

Tạo Thẻ

CardView mở rộng lớp FrameLayout và cho phép bạn hiển thị thông tin bên trong các thẻ có diện mạo nhất quán trên khắp nền tảng. Widget CardView có thể có đổ bóng và góc bo tròn.

Để tạo một thẻ có bóng, hãy sử dụng thuộc tính card_view:cardElevation. CardView sử dụng độ cao thực và đổ bóng động trên Android 5.0 (API mức 21) và cao hơn, và quay lại triển khai đổ bóng theo lập trình trên các phiên bản cũ hơn. Để biết thêm thông tin, hãy xem phần Duy trì Tính tương thích.

Sử dụng những thuộc tính sau để tùy chỉnh diện mạo của widget CardView:

Ví dụ về mã sau đây cho bạn thấy cách thêm widget CardView trong bố trí của mình:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    ... >
    <!-- A CardView that contains a TextView -->
    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        card_view:cardCornerRadius="4dp">

        <TextView
            android:id="@+id/info_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

Để biết thêm thông tin, hãy xem tài liệu tham khảo API cho CardView.

Thêm Phụ thuộc

Widget RecyclerViewCardView là bộ phận của Thư viện Hỗ trợ v7. Để sử dụng những widget này trong dự án của mình, hãy thêm những Phụ thuộc Gradle này vào mô-đun ứng dụng của bạn:

dependencies {
    ...
    compile 'com.android.support:cardview-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Theo dõi Google Developers trên WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)