RecyclerView使用 及 滑动时加载图片优化方案,GitHub上标星13k的《Android面试突击版》

本文介绍了Android中RecyclerView的使用,包括设置固定大小以提高性能,使用线性LayoutManager,自定义Adapter。同时,文章讨论了滑动时加载图片的优化策略,如控制线程数量、数据分页加载,并提供了实现方案,包括重写onScrollStateChanged方法。此外,还分享了一个解决ScrollView嵌套RecyclerView显示问题的开源示例。
摘要由CSDN通过智能技术生成

setContentView(R.layout.my_activity);

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

// improve performance if you know that changes in content do not change the size of the RecyclerView

//如果确定每个item的内容不会改变RecyclerView的大小,设置这个选项可以提高性能

mRecyclerView.setHasFixedSize(true);

// use a linear layout manager

//创建默认的线性LayoutManager

mLayoutManager = new LinearLayoutManager(this);

mRecyclerView.setLayoutManager(mLayoutManager);

// specify an adapter (see also next example)

//设置Adapter

mAdapter = new MyAdapter(myDataset);

mRecyclerView.setAdapter(mAdapter);

}

}

LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。提供默认的动画效果,你也可以定义你自己的LayoutManager和添加删除动画。在回收或重用一个View时,LayoutManager会向适配器请求新的数据来替换旧的数据,这种机制避免了创建过多的View和频繁的调用findViewById方法。

2.MyAdapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

private String[] mDataset;

// Provide a reference to the type of views that you are using (custom viewholder)

//自定义的ViewHolder,持有每个Item的的所有界面元素

public static class ViewHolder extends RecyclerView.ViewHolder {

public TextView mTextView;

public ViewHolder(TextView v) {

super(v);

mTextView = v;

}

}

// Provide a suitable constructor (depends on the kind of dataset)

public MyAdapter(String[] myDataset) {

mDataset = myDataset;

}

// Create new views (invoked by the layout manager)

//创建新View,被LayoutManager调用

@Override

public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,

int viewType) {

// create a new view

View v = LayoutInflater.from(parent.getContext())

.inflate(R.layout.my_text_view, parent, false);

// set the view’s size, margins, paddings and layout parameters

ViewHolder vh = new ViewHolder(v);

return vh;

}

// Replace the contents of a view (invoked by the layout manager)

//将数据与界面进行绑定

@Override

public void onBindViewHolder(ViewHolder holder, int position) {

// - get element from your dataset at this position

// - replace the contents of the view with that element

holder.mTextView.setText(mDataset[position]);

}

// Return the size of your dataset (invoked by the layout mana

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值