cwac-endless adapter 使用攻略 EndlessAdapter 怎麼使用

最近做一個項目需要用到ListView加載上千條數據,當然結果是很卡! 怎麼解決呢?google一下?

找到了一個開源項目http://commonsware.com/cwac

但是怎麼使用呢?網上找了一堆demo沒說清楚!經過本人反覆實驗 終於弄懂了!如果有不合理或者更好的建議請寫下來大家一起共同解決!

好了廢話不多說 開始!


demo和jar地址http://download.csdn.net/detail/zabio/6979685


1.準備好項目所需要的jar包 CWAC-AdapterWrapper.jar 和CWAC-EndlessAdapter.jar

2.導入項目這個步驟就不再說了

3.看代碼 簡單粗糙的寫了下


package com.hy.lazylistview;

import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;


import com.commonsware.cwac.endless.EndlessAdapter;


public class MainActivity extends Activity {
	private ListView lv;
	private List list = new ArrayList();


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.lv);


		//初始化第一次顯示的數據
		for (int j = 0; j < 100; j++) {
			list.add(j + "startData");
		}
		lv.setAdapter(new MyAdapter());
	}


	//這個是我們需要的可以無限往下滑進行列表數據加載的控件
	class MyAdapter extends EndlessAdapter {
		//加載時的動畫
		private RotateAnimation rotate = null;
		private View pendingView = null;
		//構造的時候 要super一下
		MyAdapter() {
			//裏面這個很熟悉 常用的baseAdapter
			super(new MyBaseAdapter());
			
			rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
					0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
			rotate.setDuration(600);
			rotate.setRepeatMode(Animation.RESTART);
			rotate.setRepeatCount(Animation.INFINITE);
		}


		//顯示加載時的view
		@Override
		protected View getPendingView(ViewGroup parent) {
			View row = LayoutInflater.from(parent.getContext()).inflate(
					R.layout.row, null);
			pendingView = row.findViewById(android.R.id.text1);
			pendingView.setVisibility(View.GONE);
			pendingView = row.findViewById(R.id.throbber);
			pendingView.setVisibility(View.VISIBLE);
			startProgressAnimation();


			return (row);
		}


		//設置加載的時間
		@Override
		protected boolean cacheInBackground() {
			SystemClock.sleep(10000); 
			//設置限制總數據大小  
			return (getWrappedAdapter().getCount() < 1000);
		}


		//往list裏面添加數據
		@Override
		protected void appendCachedData() {
			if (getWrappedAdapter().getCount() < 1000) {


				for (int i = 0; i <100; i++) {
					list.add(i+"addData");
				}
			}
		}


		void startProgressAnimation() {
			if (pendingView != null) {
				pendingView.startAnimation(rotate);
			}
		}
	}


	//這是常見的控件不解釋了
	class MyBaseAdapter extends BaseAdapter {


		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return list.size();
		}


		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return list.get(position);
		}


		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}


		class Holder {
			TextView t, t2;
		}


		@Override
		public View getView(int position, View view, ViewGroup parent) {
			Holder h;
			if (view == null) {
				h=new Holder();
				view = View.inflate(MainActivity.this, R.layout.item, null);
				h.t = (TextView) view.findViewById(R.id.tv);
				h.t2 = (TextView) view.findViewById(R.id.tv2);
				view.setTag(h);
			} else {
				h = (Holder) view.getTag();
			}


			h.t.setText("position" + position);
			h.t2.setText(list.get(position).toString());


			return view ;
		}


	}


}


--------------------資源文件--------------------

activity_main
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >


    <ListView
        android:id="@+id/lv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:cacheColorHint="#00000000"
        android:fastScrollEnabled="true" />
</RelativeLayout>

item------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#0f0"/>
    <TextView 
        android:id="@+id/tv2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#00f"/>
</LinearLayout>


row-----------------------------
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >


    <TextView
        android:id="@android:id/text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:paddingLeft="6dip"
        android:textAppearance="?android:attr/textAppearanceLarge" />


    <ImageView
        android:id="@+id/throbber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_popup_sync_1"
        android:visibility="gone" />


        <TextView
        android:id="@+id/tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:paddingLeft="6dip"
         />
    
</FrameLayout>







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章