学习笔记《Android群英传》——第四章 ListView的使用技巧
章节目录:
聊天列表
方法一:
提供两个xml消息布局(接收方的、发送方的),使用
@Override
public int getItemViewType(int position) {
ChatListBean bean = mData.get(position);
return bean.getType();
}
@Override
public int getViewTypeCount() {
return VIEW_TYPE_COUNT;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
if(getItemViewType(position) == VIEW_TYPE_SEND){
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item_chat_send, null);
holder.text = (TextView) convertView.findViewById(R.id.tv_item_send);
holder.image = (ImageView) convertView.findViewById(R.id.img_item_send);
}else {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item_chat_receive, null);
holder.text = (TextView) convertView.findViewById(R.id.tv_item_receive);
holder.image = (ImageView) convertView.findViewById(R.id.img_item_receive);
}
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.text.setText(mData.get(position).getText());
holder.image.setImageBitmap(mData.get(position).getIcon());
return convertView;
}
这样的方式来控制每一项item的样式
方法二:
只提供一个xml消息布局(接收方和发送方的同时存在),在
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
if(getItemViewType(position) == VIEW_TYPE_SEND){
//此消息是发送方的,则显示发送方的布局控件,隐藏接收方的布局控件
}else {
//此消息是接收方的,则显示接收方的布局控件,隐藏发送方的布局控件
}
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.text.setText("xxx");
return convertView;
}
此方法里根据消息所属的类别,自动控制各方布局的显隐性。
自动显示、隐藏布局的ListView
使用“ListView的滑动监听”来触发“指定控件”进行隐藏、显示的“动画”。
拓展:
1.CollapsingToolbarLayout可实现折叠式标题栏
2.自定义控件实现Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩