Android读书笔记之自定义RecyclerView列表项
2015-12-17 20:41
309 查看
该读书笔记是自己阅读《Android编程权威指南》和《The.Big.Nerd.Ranch.Guide.2nd.Edition》(《Android编程权威指南》第二版)所做的一些笔记。
在那篇文章(http://blog.csdn.net/u014285517/article/details/50333497)中,通过Fragment和RecyclerView显示了一个简单的列表,列表项只有一个简单的TextView。
在这篇文章中我们来自定义列表项,使其更具有实用价值,我们要实现的列表项左边有张图片,右边的上边有段对图片的描述,下边是一个按钮,并可以响应用户的点击。
如下图所示(仅作功能演示之用。。。。。):
下面我们来看下代码:
这段代码与那篇文章代码的主要的区别有如下几点:
第一:将View view = layoutInflater.inflate(android.R.layout.simple_list_item_1, viewGroup,false);
改成了View view = layoutInflater.inflate(R.layout.list_item,viewGroup,false);就是原来用的是Android系统自带的布局文件android.R.layout.simple_list_item_1,现在我们自定义了列表项的布局文件list_item.xml,代码如下:
第二:RecyclerView.ViewHolder实现了View.OnClickListener接口,并为按钮添加监听器,这里我们对按钮的响应就简单的弹出个Toast,具体看上面代码。
在那篇文章(http://blog.csdn.net/u014285517/article/details/50333497)中,通过Fragment和RecyclerView显示了一个简单的列表,列表项只有一个简单的TextView。
在这篇文章中我们来自定义列表项,使其更具有实用价值,我们要实现的列表项左边有张图片,右边的上边有段对图片的描述,下边是一个按钮,并可以响应用户的点击。
如下图所示(仅作功能演示之用。。。。。):
下面我们来看下代码:
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.Button; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; 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 implements View.OnClickListener{ private TextView mTextView; private Button mButton; public ItemHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(R.id.textView); mButton = (Button) itemView.findViewById(R.id.button); mButton.setOnClickListener(this); } @Override public void onClick(View v) { Toast.makeText(getActivity(),"Press",Toast.LENGTH_LONG).show(); } } 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(R.layout.list_item, 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())); viewHolder.mButton.setText(String.valueOf(item.getId())); } @Override public int getItemCount() { return mItems.size(); } } }
这段代码与那篇文章代码的主要的区别有如下几点:
第一:将View view = layoutInflater.inflate(android.R.layout.simple_list_item_1, viewGroup,false);
改成了View view = layoutInflater.inflate(R.layout.list_item,viewGroup,false);就是原来用的是Android系统自带的布局文件android.R.layout.simple_list_item_1,现在我们自定义了列表项的布局文件list_item.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/h5" android:padding="4dp" android:layout_marginLeft="16dp"/> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="4dp" android:text="textView" android:layout_toRightOf="@+id/imageView" android:layout_marginLeft="16dp" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/imageView" android:layout_below="@+id/textView" android:text="button" android:layout_marginLeft="16dp" /> </RelativeLayout>
第二:RecyclerView.ViewHolder实现了View.OnClickListener接口,并为按钮添加监听器,这里我们对按钮的响应就简单的弹出个Toast,具体看上面代码。
相关文章推荐
- Textview转化成Bitmap对象
- 【android】SQLite数据库的创建和操作、SQLite数据库可视化
- Android框架 -- GreenDao
- Android帧动画Drawable Animation
- 使用GDB调试Android应用中C/C++代码
- 使用GDB调试Android应用中C/C++代码
- Android5.0以后版本把应用移动到SD或者TF卡的方法
- Android Studio 好用的插件,这些基本是测试过好用的,或者我想用的~
- Android Bitmap OutOfMemory 解决的方法
- Android的图片压缩类ThumbnailUtils
- Android-->RxJava/RxAndroid 入门初体验
- Android进阶:PopupWindow详解
- android_rpg 天龙群侠传
- Android捕获异常处理——UncaughtExceptionHandler
- Android zxing 解析二维码,生成二维码极简demo
- Intent详细介绍及使用实例
- android propertyAnimator--()
- zhu的工作日记:handler消息处理机制浅解(android)
- Android中的asset文件夹和raw文件夹区别
- Android笔记(3)---Intent之间的传值