Android之平滑listview

官网参考地址:http://developer.android.com/training/improving-layouts/smooth-scrolling.html

官网给出的方案:

1,使用后台线程,磁盘,网络,数据库访问在独立线程中执行

2,使用ViewHolder静态类来维护view对象,减少 findViewById()的调用

// Using an AsyncTask to load the slow images in a background thread
new AsyncTask<ViewHolder, Void, Bitmap>() {
    private ViewHolder v;

    @Override
    protected Bitmap doInBackground(ViewHolder... params) {
        v = params[0];
        return mFakeImageLoader.getImage();
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        if (v.position == position) {
            // If this item hasn't been recycled already, hide the
            // progress and set and show the image
            v.progress.setVisibility(View.GONE);
            v.icon.setVisibility(View.VISIBLE);
            v.icon.setImageBitmap(result);
        }
    }
}.execute(holder);


参考博客:http://blog.csdn.net/long704480904/article/details/8144939

1,使用ConverView

-It reuses the convertView passed to getView() to avoid inflating View when it is not necessary
(译:重用缓存convertView传递给getView()方法来避免填充不必要的视图)

2,使用ViewHolder静态类

-It uses the ViewHolder pattern to avoid calling findViewById() when it is not necessary
(译:使用ViewHolder模式来避免没有必要的调用findViewById():因为太多的findViewById也会影响性能)
ViewHolder类的作用
-The ViewHolder pattern consists in storing a data structure in the tag of the view
returned by getView().This data structures contains references to the views we want to bind data to,
thus avoiding calling to findViewById() every time getView() is invoked
(译:ViewHolder模式通过getView()方法返回的视图的标签(Tag)中存储一个数据结构,这个数据结构包含了指向我们
要绑定数据的视图的引用,从而避免每次调用getView()的时候调用findViewById())

	static class ViewHolder {
		public ImageView usrhead;
		public TextView update;
		public TextView nickname;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder;
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.usr_grid_item, null);
			viewHolder = new ViewHolder();
			viewHolder.usrhead = (ImageView) convertView
					.findViewById(R.id.iv_usrhead);
			viewHolder.update = (TextView) convertView
					.findViewById(R.id.tv_update);
			viewHolder.nickname = (TextView) convertView
					.findViewById(R.id.tv_nickname);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}

		viewHolder.nickname.setText(gridItemList.get(position).getNickname());

		if (gridItemList.get(position).getUpdate() > 0) {
			viewHolder.update.setText(gridItemList.get(position).getUpdate()
					+ "");
		} else {
			viewHolder.update.setText("0");
		}

		if (gridItemList.get(position).getUpdate() > 0) {
			viewHolder.update.setText(gridItemList.get(position).getUpdate()
					+ "");
		} else {
			viewHolder.update.setText("0");
		}

		Bitmap bitmap = decodebitmap(position);
		if (null == bitmap) {
			viewHolder.usrhead.setImageResource(R.drawable.person);
		} else {
			viewHolder.usrhead.setImageBitmap(bitmap);
		}

		return convertView;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值