Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 【Android開發】RecyclerView的基本使用

【Android開發】RecyclerView的基本使用

編輯:關於Android編程

大體結構如下

【服務器維護中,暫時不能上傳圖片】

具體代碼如下

(此處以RecyclerView存在於一個Fragment內為例)
需要import的主要的包:
android.support.v7.widget.RecyclerView(需要設置支持庫)

XXListFragment.java

public class XXListFragment extends Fragment
{
    private RecyclerView mXXRecyclerView;
    private XXAdapter mAdapter;

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

        //將私有成員mXXRecyclerView與布局中的RecyclerView綁定
        mXXRecyclerView = (RecyclerView) v.findViewById(R.id.recycler_view_xx_list);
        //設置布局Manager
        mMemoRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        //以後可能會用到,故單獨拿出來做成一個函數
        updateUI();

        return v;
    }

    private void updateUI()
    {
        //初始化單例
        XXLab xxLab = XXLab.get(getActivity());
        List xxs = xxLab.getMemos();

        //初始化Adapter
        mAdapter = new XXAdapter(xxs);
        //為RecyclerView設置Adapter
        mXXRecyclerView.setAdapter(mAdapter);
    }

    //ViewHolder的匿名內部類
    private class XXHolder extends RecyclerView.ViewHolder
    {
        //存儲該ViewHolder所顯示內容的對象
        private XX mXX;
        //示例組件
        //此處以每一項只顯示標題的RecyclerView為例
        private TextView mTitle;

        public MemoHolder(View itemView)
        {
            super(itemView);
            //將組件與布局中的相應組件綁定
            mTitle = (TextView) itemView.findViewById(R.id.xx_list_item_title);
        }

        public void bindXX(XX xx)
        {
            mXX = xx;
            //將組件實際顯示的內容修改為傳入的對象的相應內容
            mTitle.setText(mXX.getTitle());
        }
    }

    private class XXAdapter extends RecyclerView.Adapter
    {
        private List mXXs;

        public XXAdapter(List xxs)
        {
            mXXs = xxs;
        }

        @Override
        public XXHolder onCreateViewHolder(ViewGroup parent, int viewType)
        {
            LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
            //設置View
            //此處使用的布局是定制的列表項布局
            View view = layoutInflater.inflate(R.layout.list_item_xx, parent, false);
            //創建新的ViewHolder
            return new XXHolder(view);
        }

        @Override
        public void onBindViewHolder(XXHolder holder, int position)
        {
            //該對象為儲存要顯示的內容的對象
            XX xx = mXXs.get(position);
            //將這個對象傳給ViewHolder來綁定
            //RecyclerView是會回收不顯示的ViewHolder來顯示新內容
            //以達到節省資源的目的的組件
            //所以此處傳入同一個ViewHolder的可能是不同的對象
            holder.bindXX(xx);
        }

        //系統會用到的方法
        @Override
        public int getItemCount()
        {
            return mXXs.size();
        }
    }
}

list_item_xx.xml(/res/layout/…)(定制列表項的內容)



    

fragment_xx_list.xml(/res/layout/…)




    

XX.java(用於儲存列表中一項的數據的類)

public class XX
{
    private String mTitle;

    public void setTitle(String title)
    {
        mTitle = title;
    }

    public String getTitle()
    {
        return mTitle;
    }
}

XXLab.java(儲存列表內容的單例)

public class MemoLab
{
    //只允許存在一個單例
    private static XXLab sXXLab;
    //單例維護的內容列表
    private List mXXs;

    private XXLab(Context context)
    {
        ...
    }

    public static XXLab get(Context context)
    {
        //有且僅有一個單例對象
        if (sXXLab == null)
        {
            sXXLab = new XXLab(context);
        }
        return sXXLab;
    }

    //返回單例所維護的內容列表
    public List getXXs()
    {
        return mXXs;
    }
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved