最近发现RecyclerView这么个东西。据说是用来替代ListView和GridView的,没事研究下,虽然选的是原创,但是还是借鉴了网上的的诸多大神,感谢一下!
1、添加依赖
RecyclerView是新出的,首先要添加依赖:
compile 'com.android.support:support-v4:21.0.2'
compile 'com.android.support:appcompat-v7:21.0.0'
compile 'com.android.support:recyclerview-v7:21.0.0'
compile 'com.android.support:cardview-v7:21.0.0'
2、布局文件
<view xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/course_swipeRefreshLayout"
class="android.support.v4.widget.SwipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<view xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/course_recylerView"
class="android.support.v7.widget.RecyclerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></view>
</view>
SwipeRefreshLayout用来刷新
3、刷新和自动加载
//上拉刷新
mLayoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(mLayoutManager);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (isRefreshing) {
} else {
onHeaderRefresh();
isRefreshing = false;
}
}
});
<span style="white-space:pre"> </span>//自动加载
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
int lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
int totalVisibleItem = mLayoutManager.getItemCount();
//表示剩下2个item自动加载
// dy>0 表示向下滑动
if(lastVisibleItem >= totalVisibleItem-2 && dy>0){
if(isLoadingMore){
}else {
onFooterRefresh();
isLoadingMore = false;
}
}
}
});
如果想用GridView可以用下面的
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
<span style="white-space:pre"> </span>super.onScrolled(recyclerView, dx, dy);
<span style="white-space:pre"> </span>int[] visibleItems = mLayoutManager.findLastVisibleItemPositions(null);
<span style="white-space:pre"> </span> int lastitem = Math.max(visibleItems[0],visibleItems[1]);
<span style="white-space:pre"> </span> Log.d(TAG,"visibleItems =" + visibleItems);
<span style="white-space:pre"> </span> Log.d(TAG,"lastitem =" + lastitem);
<span style="white-space:pre"> </span> Log.d(TAG,"adapter.getItemCount() =" + adapter.getItemCount());
<span style="white-space:pre"> </span> if (dy > 0 && lastitem > adapter.getItemCount() - 5 && !isLoadingMore) {
<span style="white-space:pre"> </span> Log.d(TAG,"will loadNewFeeds");
<span style="white-space:pre"> </span>}
}
public class IndexCourseRecyleViewAdapter extends RecyclerView.Adapter<IndexCourseRecyleViewAdapter.ViewHolder> {
private List<CourseModel> mlist;
private Context context;
private ImageLoader imageLoader = ImageLoader.getInstance();
private DisplayImageOptions headOptions;
public IndexCourseRecyleViewAdapter(List<CourseModel> mlist, Context context) {
this.mlist = mlist;
this.context = context;
initOptions();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.course_hot_list_item,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
try {
imageLoader.displayImage(mlist.get(position).getPath(),
holder.courseImage, headOptions);
}catch (Exception e){
e.printStackTrace();
}
holder.courseName.setText("《" + mlist.get(position).getName() + "》");
holder.courseCount.setText(mlist.get(position).getCoursePeriod() + context.getResources().getString(R.string.course_item1));
holder.courseStart.setText(mlist.get(position).getCourseStart().replace('-','.'));
holder.courseEnd.setText(mlist.get(position).getCourseEnd().replace('-', '.'));
}
@Override
public int getItemCount() {
return mlist.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public ImageView courseImage;
public TextView courseName;
public TextView courseCount;
public TextView courseStart;
public TextView courseEnd;
public ViewHolder(View itemView) {
super(itemView);
courseImage = (ImageView) itemView.findViewById(R.id.course_hot_class_image);
courseName = (TextView) itemView.findViewById(R.id.course_hot_course_name);
courseCount = (TextView) itemView.findViewById(R.id.course_hot_course_count);
courseStart = (TextView) itemView.findViewById(R.id.course_hot_course_start);
courseEnd = (TextView) itemView.findViewById(R.id.course_hot_course_end);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
doOnItemClickListener(getPosition());
}
});
}
}
private void initOptions() {
headOptions = OptionTools.getHeadOptions(context);
}
private OnItemClickListener onItemClickListener;
public interface OnItemClickListener {
public void onClick(int position);
}
public void setOnItemClickListener(
OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public void doOnItemClickListener(int position) {
if (onItemClickListener != null) {
this.onItemClickListener.onClick(position);
}
}
}
注意:adapter不要忘了加泛型哦
4、item的点击事件
这个adapter里已经声明了接口,用adapte实现一下就ok
adapter.setOnItemClickListener(new IndexCourseRecyleViewAdapter.OnItemClickListener() {
@Override
public void onClick(int position) {
Intent intent = new Intent(getActivity(), CourseDetailActivity.class);
intent.putExtra("courseID",courseModelList.get(position).getCourseId());
startActivity(intent);
}
});
本人刚毕业菜鸟一枚,第一篇博客,希望诸位大神多多指教!代码有点乱希望海涵