版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/seaker_/article/details/52882755
1.使用viewHolder提高ListView的效率
避免的每次去调用getView()方法的时候都要去findViewById()实例控件,利用ViewHolder可以提高50%的效率;
`
public final class ViewHolder{
public TextView tv;
public ImageView iv;
public EditText et;
}
`
2.ListView的使用
(1)ListView每个itme之间的分隔线,系统提供了divider和dividerHeight两个属性
divider:可以是一个颜色也可以是一个资源文件
dividerHeight:设置分隔线的高度
如果不想要分隔线就可以设置为android:divider=“@null”
(2)ListView隐藏滚动条:把scrollbars设置为none
(3)取消ListView的点击效果:listSelector:#00000000或者是用android系统自带的一个透明颜色listselector:android:color/transparent
(4)设置显示到ListView的第几个itme,默认是在第一个;listview.setSelection(n)(这是瞬间到达第n个itme);也可以通过下面的代码平滑的到达;
mListView.smoothScrollby(distance,duration);
mListView.smoothScrollbyOffset(offset);
mListView.smoothScrollToosition(index);
(5)动态的修改listView,通过修改List数据来改变listView,但是要保证是修改了同一个list数据,mAdapter.notifyDateSetChanged();
(6)listView的滑动和滚动
mListView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:// 触摸
break;
case MotionEvent.ACTION_MOVE:// 移动
break;
case MotionEvent.ACTION_UP:// 抬起
break;
}
return false;
}
});
// 滑动Listview
mListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_FLING:// 手指抛动
break;
case OnScrollListener.SCROLL_STATE_IDLE:// 停止滑动
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 手指滚动
break;
default:
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
//滚动时会一直调用
}
});
(7)具有弹性的listView
//MaxOverScrollY参数默认是0, 只需要把此参数修改为大于0的参数即可。
int mMaxOverScrollY = 100;
//重写overScrollBy方法 改变MaxOverScrollY参数
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX,
int scrollY, int scrollRangeX, int scrollRangeY,
int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
// TODO Auto-generated method stub
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX,
scrollRangeY, maxOverScrollX, mMaxOverScrollY, isTouchEvent);
}
private void initView(){//根据手机的分辨率动态的去修改这个参数的大小
DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
float density = metrics.density;
mMaxOverScrollY = (int) (density * mMaxOverScrollY);
}
(8)多种itme类型的Listview
//adapter中添加两个方法:
@Override
public int getViewTypeCount() {
//返回item的种类数
return 2;
}
@Override
public int getItemViewType(int position) {
//返回itme的具体类型
return mDate.get(position).type;
}
//在getView方法中根据不同的type返回不同的convertView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = null;
if (convertView == null) {
if (getItemViewType(position) == 0) {
holder = new Holder();
convertView = View.inflate(MainActivity.this,
R.layout.main_item, null);
holder.city = (TextView) convertView
.findViewById(R.id.tv_item_city);
holder.weather = (TextView) convertView
.findViewById(R.id.tv_item_weather);
} else {
holder = new Holder();
convertView = View.inflate(MainActivity.this,
R.layout.main_item_2, null);
holder.city = (TextView) convertView
.findViewById(R.id.tv_item_city_2);
holder.weather = (TextView) convertView
.findViewById(R.id.tv_item_weather_2);
}
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
Bean bean = mDate.get(position);
holder.city.setText(bean.city);
holder.weather.setText(bean.weather);
return convertView;
}
(9)动态的改变listView的布局,点击某个itme来达到一个Focus的效果
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
System.out.println("点击了第"+position+"个条目");
mMainAdapter.setCurrentItem(position);
mMainAdapter.notifyDataSetChanged();
}
});
clsee MyAdapter extends BaseAdapter{
private int mCurrentItem;//点击的条目
private boolean isFaist = false;//是否为第一次加载
//第几个条目被点击
public void setCurrentItem(int position) {
mCurrentItem = position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//根据点击的条目的位置来分别返回不同的convertview
if (mCurrentItem == position && isFaist) {
return View1;
}else{
isFaist = true;
return View2;
}
}
}