RecyclerView
来源:互联网 发布:sql server可视化界面 编辑:程序博客网 时间:2024/06/01 19:20
RecyclerView经常被用来和listview做对比来使用,今天来分享一个项目中的例子,来给大家展示一下RecyclerView比listview的优势。
项目要求:
1.下边列表项数可以根据需求动态配置,当数量小于4项的时候,我们把listitem的宽度设为“屏幕的宽度/x项数“,当项数多于4项的时候,每一项的宽度固定为160dp。
2. 当项数少于等于3项时,显示分隔符,多于3项时去掉分隔符
在实际使用过程中,发现在listview的getView方法设置layoutparams总是不能动态变化listview item的宽度。而且分隔符的需求也不好实现。于是考虑用RecyclerView.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
public
class
IconsListViewAdapter
extends
RecyclerView.Adapter<IconsListViewAdapter.ViewHolder> {
private
List<IconsAreaBean.MenusBean> mMenus;
private
Context mContext;
private
LayoutInflater mInflater;
private
int
selectIndex = -
1
;
private
int
defaultItemCount =
4
;
private
MyItemClickListener mListener;
private
int
mDefaultImgs[] = {R.drawable.moneybox, R.drawable.security, R.drawable.help};
public
IconsListViewAdapter(Context context, List<IconsAreaBean.MenusBean> iconsAreaBean) {
this
.mContext = context;
this
.mMenus = iconsAreaBean;
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//LayoutInflater.from(mContext);
this
.setOnItemClickListener(
new
MyItemClickListener() {
@Override
public
void
onItemClick(View view,
int
position) {
IconsAreaBean.MenusBean iconBean = mMenus.get(position);
String accUrl = IntentWebViewUtils.getWebUrl(iconBean.getAccUrl());
if
(iconBean !=
null
&& ValityUtil.isUrl(accUrl)){
IntentUtil.openWebView((Activity) mContext, accUrl);
MobclickAgent.onEvent(mContext, ConstantConfig.HOME_PAGE_MENU_CLICK + position);
}
}
});
}
public
void
refreshData(List<IconsAreaBean.MenusBean> menusBeen){
this
.mMenus = menusBeen;
notifyDataSetChanged();
}
@Override
public
ViewHolder onCreateViewHolder(ViewGroup parent,
int
i) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.icon_list_item, parent,
false
);
return
new
ViewHolder(v);
}
@Override
public
void
onBindViewHolder(ViewHolder holder,
int
position) {
if
(mMenus ==
null
|| mMenus.size() ==
0
)
return
;
final
IconsAreaBean.MenusBean iconBean = mMenus.get(position);
if
(iconBean !=
null
) {
holder.getTextView().setText(iconBean.getName());
final
String url = iconBean.getAccUrl();
String imageUrl =
null
;
if
(iconBean.getImgUrl().startsWith(
"http"
) || iconBean.getImgUrl().startsWith(
"https"
)) {
imageUrl = iconBean.getImgUrl();
}
else
{
imageUrl = ConstantConfig.FE_HOST_URL + iconBean.getImgUrl();
}
if
(ValityUtil.isUrl(imageUrl)) {
int
defaultImg;
if
(position < mDefaultImgs.length) {
defaultImg = mDefaultImgs[position];
}
else
{
defaultImg = R.drawable.qiangui_banner_def;
}
ImageLoader imageLoader = HttpManager.getHttpManagerBase(mContext).httpImage();
ImageLoader.ImageListener listener = ImageLoader.getImageListener(holder.getImageView(),
defaultImg, defaultImg);
imageLoader.get(imageUrl, listener);
}
}
if
(mMenus.size() <= defaultItemCount) {
int
menuSize = DeviceInfoUtils.getScreenWidth((Activity) mContext) / mMenus.size();
LinearLayout.LayoutParams lp =
new
LinearLayout.LayoutParams(
menuSize, LinearLayout.LayoutParams.MATCH_PARENT);
holder.getItemView().setLayoutParams(lp);
}
else
{
LinearLayout.LayoutParams lp =
new
LinearLayout.LayoutParams(
(
int
) mContext.getResources().getDimension(R.dimen.qiangui_size_160px), LinearLayout.LayoutParams.MATCH_PARENT);
holder.getItemView().setLayoutParams(lp);
}
}
@Override
public
long
getItemId(
int
position) {
return
position;
}
@Override
public
int
getItemCount() {
return
mMenus !=
null
? mMenus.size() :
0
;
}
public
void
setOnItemClickListener(MyItemClickListener listener) {
this
.mListener = listener;
}
public
class
ViewHolder
extends
RecyclerView.ViewHolder
implements
View.OnClickListener {
private
View rootView;
private
ImageView imageView;
private
TextView textView;
ViewHolder(View view) {
super
(view);
rootView = view;
imageView = (ImageView) view.findViewById(R.id.img_list_item);
textView = (TextView) view.findViewById(R.id.text_list_item);
rootView.setOnClickListener(
this
);
}
/**
* 点击监听
*/
@Override
public
void
onClick(View v) {
if
(mListener !=
null
) {
mListener.onItemClick(v, getPosition());
}
}
ImageView getImageView() {
return
imageView;
}
TextView getTextView() {
return
textView;
}
View getItemView() {
return
rootView;
}
}
}
注意在addItemDecoration前边先remove掉,否则会造成分割线添加重复,而使得间距越来越大的情况。
0 0
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- maven+springmvc下载excle文件——ie8可用(二)
- 输入xxxx-xx-xx格式的日期可查询当日万年历
- 单点登录之CAS SSO从入门到精通(第一天)
- 推荐好听歌曲下载
- Javascript Flash Access-Control-Allow-Origin 跨域
- RecyclerView
- iOS开发:UITableView性能优化
- gcc编译参数:如何包含头文件和动态链接库
- java.lang.IllegalStateExceptionThe specified child already has a parent
- leetcode29 Divide Two Integers
- [LeetCode] 144. Binary Tree Preorder Traversal
- C#调用webbrowser,阻止弹出新HTML页面
- Flume安装及简单部署
- Software Architecture Patterns