三、Listview优化和常用设置

listview 是Android开发中最熟悉的控件了,经过2年的工作和学习,熟悉和积累了几种优化的方式;

1:在getView中编写带有缓存的代码



@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			if(convertView == null){
				convertView = View.inflate(getApplicationContext(), R.layout.list_item, null);
				holder = new ViewHolder();
				
				holder.delete = (ImageView) convertView.findViewById(R.id.delete);
				holder.tv_msg =(TextView) convertView.findViewById(R.id.tv_list_item);
				convertView.setTag(holder);
			}else{
				holder = (ViewHolder) convertView.getTag();
			}
			
			holder.tv_msg.setText(msgList.get(position));
			
			holder.delete.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
				//删除对应的条目
					msgList.remove(position);
					
					//刷新listView
					MyListAdapter.this.notifyDataSetChanged();
				}
			});
			convertView.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
					//设置输入框 
					input.setText(msgList.get(position));
					
					popWin.dismiss();
				}
			});
			
			return convertView;
		}
		}

	private class ViewHolder{
		TextView tv_msg;
		ImageView delete;
	}


总结:

复用view ,使用ViewHolder
如果item中 含有图片,异步下载图片,可以用线程池等

如果item中含有图片的话,在快速滑动Listview时不用加载图片,等待滑动停止后再加载。

item中的图片使用缓存

考虑是否可以将图片压缩 

item的布局文件尽量简单化,比如布局item时用RelativeLayout 等。
可以考虑用RecyclerView 代替listview ,如果熟悉 RecyclerView的话。




常用设置:


1每一个Item之间都会有系统自带的分割线

去除也很简单,只需将分割线的高度设为0,即不可见。appListView.setDividerHeight(0);

  listviewQuot.setDividerHeight(0);
listviewQuot.setDivider(null);

android:cacheColorHint="#000000"

2  //设置拖动不变色
    listview.setCacheColorHint(0);

 //ListView划动至顶部或者底部时,去掉默认的阴影显示

listView.setVerticalFadingEdgeEnabled(false);    

 

3 点击默认背景修改:

给条目设置一个背景  ,如果不设置 则有默认背景


4代码 部分

 list.setItemsCanFocus(false); 
XML 部分
android:focusable=”false”
android:focusableInTouchMode=”false”


说明:如果一个 ListView 的条目子视图中包含了 CheckBox、ImagaButton 等可以接收触控监听的控件的话,它们可能会遮断 ListView 本身对条目点击的监听,使得其setOnItemClickListener() 方法失效。解决方法为,如果是在代码中动态生成的空间,可以用 setItemsCanFocus() 方法来禁用那些控件获取焦点。如果实在 XML 文件中定义的控件,则应该在 XML 文件添加相应元素属性以增加禁止获取焦点的。

5

 让listview滑动到上部
需要在setadapter之后进行设置
listview.setSelectionAfterHeaderView();
当对一个listview 设置adapter时,如果adapter是新new出来的 ,那么listview会自动滑到上部来显示。如果是adapter.notifyDataSetChanged();
则listview 会停留在当前划动的位置。并追加更新的数据



另外:多组显示item



使用ListView分类的时候会用到两个方法getItemViewType和getViewTypeCount:

getViewTypeCount这个方法告诉ListView我共有多少种item。

getItemViewType方法告诉ListView每行该显示哪种item。

并且该方法中返回的type类型必须为整数且不能大于getViewTypeCount返回的数。

class MyAdapter extends BaseAdapter{
.......

@Override
public int getViewTypeCount() {
    return super.getViewTypeCount();
}

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}
.......

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值