1. 程式人生 > >Android讀書筆記之用RecyclerView顯示列表項

Android讀書筆記之用RecyclerView顯示列表項

該讀書筆記是自己閱讀《Android程式設計權威指南》和《The.Big.Nerd.Ranch.Guide.2nd.Edition》(《Android程式設計權威指南》第二版)所做的一些筆記。

在上一篇文章(見:http://blog.csdn.net/u014285517/article/details/50331971)中只是在Fragment中放了一個TextView,略顯單薄。。。

這篇文章在Fragment中放個 RecyclerView來顯示一個0-99的列表資料。

首先來看核心的ListFragment的程式碼:

package com.example.zhan.fragmenttest;

import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by zhang on 12/16/2015.
 */
public class ListFragment extends Fragment {

    private RecyclerView mRecyclerView;
    private ItemAdapter mItemAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_list,container,false);

        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));//不要忘了。。

        //產生列表資料
        List<Item> itemList = new ArrayList<>();
        for (int i = 0;i < 100;i++) {
            Item item = new Item();
            item.setId(i);
            itemList.add(item);
        }

        mItemAdapter = new ItemAdapter(itemList);
        mRecyclerView.setAdapter(mItemAdapter);

        return view;
    }

    private class ItemHolder extends RecyclerView.ViewHolder {

        private TextView mTextView;

        public ItemHolder(View itemView) {
            super(itemView);
            mTextView = (TextView) itemView;
        }

    }

    private class ItemAdapter extends RecyclerView.Adapter<ItemHolder> {

        private List<Item> mItems;

        public ItemAdapter(List<Item> items) {
            mItems = items;
        }

        @Override
        public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            View view = layoutInflater.inflate(android.R.layout.simple_list_item_1,
                    viewGroup,false);
            return new ItemHolder(view);
        }

        @Override
        public void onBindViewHolder(ItemHolder viewHolder, int i) {
            Item item = mItems.get(i);
            //這裡開始直接傳數值,結果被當做資源ID了。。。。。
            //然後就android.content.res.Resources$NotFoundException
            viewHolder.mTextView.setText(String.valueOf(item.getId()));
        }

        @Override
        public int getItemCount() {
            return mItems.size();
        }

    }

}

關於RecyclerView這裡不多講了。。

佈局檔案fragment_list.xml如下:

<android.support.v7.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/recycler_view"
    android:layout_height="match_parent"
    android:layout_width="match_parent"/>

Activity部分程式碼幾乎沒變,就是把fragment =new 

BlankFragment(); 改成了fragment = new ListFragment();這裡程式碼就不貼了,可以看Android Fragment學習一那篇部落格。

還有個表示列表項的類:

package com.example.zhan.fragmenttest;

/**
 * Created by zhang on 12/16/2015.
 */
public class Item {

    private int id;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}

這個列表項很簡單,不過你可以在此基礎上進行補充。