版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shakdy/article/details/81947858
简介
- 本文内容是记录如何使用RecyclerView
注意:具体代码中的一下变量是从一个项目中复制过来的,如果要在自己项目中使用,需要修改成自己项目需要的变量。
第一步:项目中app目录的build.gradle文件添加依赖
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.zhy:base-rvadapter:3.0.3'
第二步:添加RecyclerView布局文件
<android.support.v7.widget.RecyclerView
android:id="@+id/rcv_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
第三步:适配器布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:gravity="center_horizontal"
android:orientation="vertical" >
<ImageView
android:id="@+id/order_item_pic_iv"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_margin="5dp"
android:scaleType="fitCenter"
android:src="@drawable/image_loading" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/book_item_price_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥10"
android:textColor="@color/titlebar" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/order_item_pic_iv"
android:text="/份"
android:textColor="@android:color/darker_gray" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
android:clickable="false"
android:focusable="false"
android:orientation="vertical" >
<TextView
android:id="@+id/order_item_name_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:padding="5dp"
android:singleLine="true"
android:text="青椒炒蛋"
android:textSize="18sp" />
<TextView
android:id="@+id/order_item_desc_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:text="经典菜式,美味可口"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/order_item_date_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:padding="5dp"
android:singleLine="true"
android:text="2016-01-04 08:25:00 至2016-01-07 09:00:00"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/order_item_limit_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:text="5/10"
android:textColor="@android:color/darker_gray" />
<TextView
android:id="@+id/book_item_sure_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/book_submit_btn_selector"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:text="预定"
android:textColor="@android:color/white" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:clickable="false"
android:focusable="false"
android:gravity="center_vertical"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone" >
<ImageButton
android:id="@+id/book_item_decrease_ibtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/book_item_decress"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/book_item_num_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="1"
android:textStyle="bold" />
<ImageButton
android:id="@+id/book_item_add_ibtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/book_item_add"
android:clickable="true"
android:focusable="true"
android:padding="10dp"
android:scaleType="fitCenter" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
第四步:适配器java文件
public class BookDinnerAdater extends CommonAdapter<Book> {
private String TAG = BookDinnerAdater.class.getSimpleName();
private ButtonInterface buttonInterface;
private MenuSelectInterface menuSelectInterface;
private MenuCancelInterface menuCancelInterface;
public BookDinnerAdater(Context context, int layoutId, List<Book> datas) {
super(context, layoutId, datas);
}
/**
*按钮点击事件需要的方法
*/
public void setButtonOnclick(ButtonInterface buttonInterface){
this.buttonInterface=buttonInterface;
}
/**
*选择控件点击事件需要的方法
*/
public void setMenuSelectOnclick(MenuSelectInterface menuSelectedInterface){
this.menuSelectInterface=menuSelectedInterface;
}
/**
*取消控件点击事件需要的方法
*/
public void setMenuCancelOnclick(MenuCancelInterface menuCancelInterface){
this.menuCancelInterface = menuCancelInterface;
}
@Override
protected void convert(ViewHolder holder,Book book, int position) {
holder.setText(R.id.order_item_name_tv,book.getName());
// holder.setText(R.id.order_item_pic_iv,book.getPhoto());
holder.setText(R.id.order_item_desc_tv,book.getDesc());
String limit = book.getTotal()+"/"+book.getLimit();
holder.setText(R.id.order_item_limit_tv,limit);
holder.setText(R.id.book_item_price_tv,"¥"+book.getPrice());
String date = book.getBegindate()+" "+book.getBegintime()+" 至 "+
book.getEnddate()+" "+book.getEndtime();
holder.setText(R.id.order_item_date_tv,date);
TextView book_item_sure_btn = holder.getView(R.id.book_item_sure_btn);
book_item_sure_btn.setText("预订");
book_item_sure_btn.setTextColor(Color.WHITE);
book_item_sure_btn.setEnabled(true);
//预订
holder.setOnClickListener(R.id.book_item_sure_btn, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
/**
* 按钮点击事件对应的接口
*/
public interface ButtonInterface{
void onclick(View view, int position);
}
/**
* 取消点击事件对应的接口
*/
public interface MenuSelectInterface{
void onclick(View view, int position);
}
/**
* 选择控件点击事件对应的接口
*/
public interface MenuCancelInterface{
void onclick(View view, int position);
}
}
设置RecyclerView关联适配器
private List<T> mData = new ArrayList<T>();
private void initData() {
mRecyclerView.setHasFixedSize(true);
//设置布局管理器
linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 4));
// mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
//添加分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
mAdapter = new BookDinnerAdater(this, R.layout.list_item_menu, mData);
mAdapter.setOnItemClickListener(new CommonAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) {
;
}
@Override
public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position) {
return false;
}
});
// initHeaderAndFooter();
mLoadMoreWrapper = new LoadMoreWrapper(mAdapter);
mLoadMoreWrapper.setLoadMoreView(R.layout.default_loading);
mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener() {
@Override
public void onLoadMoreRequested() {
Log.i(Tag,"onLoadMoreRequested");
}
});
mRecyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
}
/**
* 初始化头部,仅供参考
*/
private void initHeaderAndFooter() {
//装饰者模式
mHeaderAndFooterWrapper = new HeaderAndFooterWrapper(mAdapter);
View header = LayoutInflater.from(getActivity()).inflate(R.layout.item_course, mRecyclerView, false);
TextView tv_section = (TextView) header.findViewById(R.id.tv_section);
TextView tv_course_name = (TextView) header.findViewById(R.id.tv_course_name);
TextView tv_classes_name = (TextView) header.findViewById(R.id.tv_classes_name);
TextView tv_teacher_name = (TextView) header.findViewById(R.id.tv_teacher_name);
TextView tv_course_state = (TextView) header.findViewById(R.id.tv_course_state);
tv_section.setText("节次");
tv_course_name.setText("课程");
tv_classes_name.setText("班级");
tv_teacher_name.setText("教师");
tv_course_state.setText("状态");
mHeaderAndFooterWrapper.addHeaderView(header);
}