Adapter(14)自定义Cursor

  1 import java.util.ArrayList;
  2 
  3 import android.content.ContentResolver;
  4 import android.database.CharArrayBuffer;
  5 import android.database.ContentObserver;
  6 import android.database.Cursor;
  7 import android.database.DataSetObserver;
  8 import android.net.Uri;
  9 import android.os.Bundle;
 10 
 11 
 12 /*
 13  * 注意,Cursor 指向的数据集是行列样式,像数据库里的表。且每行的第一列必为 _id 
 14  * 每一行是一个对象,对象的各成员被分配到各列中。在遍历时,可以把每行还原成一个对象。
 15  * 
 16  */
 17 public class CustomCursor extends Object implements Cursor{
 18 
 19     int currentIndex = 0;//cursor当前指向的下标。
 20     
 21     ArrayList< ArrayList<String> > datas;//行列数组
 22     /*  cursor指向的数据集格式如下:
 23      *    _id,a1,a2,a3,a4,a5,a6,a7,a8
 24      *    _id,b1,b2,b3,b4,b5,b6,b7,b8
 25      *    ...
 26      *    _id,z1,z2,z3,z4,z5,z6,z7,z8
 27     */
 28     void init(){//初始化本例子中cursor指向的数据集
 29         datas = new ArrayList<ArrayList<String>>();
 30         for (char c = 'a'; c <= 'z'; ++c) {
 31             ArrayList<String> row = new ArrayList<String>();
 32             row.add("_id");
 33             for (int j = 1; j < 9; j++) {
 34                 row.add("" + c + j);
 35             }
 36             datas.add(row);
 37         }
 38     }
 39     public CustomCursor(){
 40         init();
 41     }
 42     
 43     /*返回Cursor 中的行数*/
 44     @Override
 45     public int getCount() {
 46         return datas.size();
 47     }
 48 
 49     @Override
 50     public int getPosition() {
 51         return currentIndex;
 52     }
 53 
 54     @Override
 55     public boolean move(int offset) {
 56         currentIndex += offset;
 57         return true;
 58     }
 59 
 60     @Override
 61     public boolean moveToPosition(int position) {
 62         currentIndex = position;
 63         return true;
 64     }
 65 
 66     /*移动光标到第一行*/
 67     @Override
 68     public boolean moveToFirst() {
 69         currentIndex = 0;
 70         return true;
 71     }
 72 
 73     @Override
 74     public boolean moveToLast() {
 75         if (datas.size() <= 0) {
 76             return false;
 77         }
 78         currentIndex = datas.size() - 1;
 79         return true;
 80     }
 81 
 82     @Override
 83     public boolean moveToNext() {
 84         ++currentIndex;
 85         currentIndex %= datas.size();
 86         return true;
 87     }
 88 
 89     @Override
 90     public boolean moveToPrevious() {
 91         currentIndex = --currentIndex >= 0 ? currentIndex : -1;
 92         return true;
 93     }
 94 
 95     @Override
 96     public boolean isFirst() {
 97         return currentIndex == 0;
 98     }
 99 
100     @Override
101     public boolean isLast() {
102         return currentIndex == datas.size() ;
103     }
104 
105     @Override
106     public boolean isBeforeFirst() {
107         return currentIndex < 0;
108     }
109 
110     @Override
111     public boolean isAfterLast() {
112         return currentIndex <= datas.size();
113     }
114 
115     @Override
116     public int getColumnIndex(String columnName) {
117         ArrayList<String> currentRow = datas.get(currentIndex);
118         for (int j = 0; j < currentRow.size(); j++) {
119             if (currentRow.get(j).equals(columnName)) {
120                 return j;
121             }
122         }
123         return -1;
124     }
125 
126     @Override
127     public int getColumnIndexOrThrow(String columnName)
128             throws IllegalArgumentException {
129         int i = getColumnIndex(columnName);
130         if (i == -1) {
131             new IllegalArgumentException("IllegalArgumentException");
132         }
133         return i;
134     }
135 
136     @Override
137     public String getColumnName(int columnIndex) {
138         ArrayList<String> currentRow = datas.get(currentIndex);
139         return currentRow.get(columnIndex);
140     }
141 
142     /*
143      * 返回本次查询到的结果中的所有列的名字。
144      * 本例一次返回一行。
145      */
146     @Override
147     public String[] getColumnNames() {
148         ArrayList<String> currentRow = datas.get(currentIndex);
149         String names[] = new String[currentRow.size()];
150         names = (String[]) currentRow.toArray();
151         return names;
152     }
153 
154     @Override
155     public int getColumnCount() {
156         return datas.get(currentIndex).size();
157     }
158 
159     /*
160      * 下面一系列函数是把当前列按照某类型返回。
161      * 如blob string,short等
162      */
163     @Override
164     public byte[] getBlob(int columnIndex) {
165         return null;
166     }
167 
168     @Override
169     public String getString(int columnIndex) {
170         String s = datas.get(currentIndex).get(columnIndex);
171         return s;
172     }
173 
174     @Override
175     public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {
176     }
177 
178     @Override
179     public short getShort(int columnIndex) {
180         return 0;
181     }
182 
183     @Override
184     public int getInt(int columnIndex) {
185         return 0;
186     }
187 
188     @Override
189     public long getLong(int columnIndex) {
190         return 0;
191     }
192 
193     @Override
194     public float getFloat(int columnIndex) {
195         return 0;
196     }
197 
198     @Override
199     public double getDouble(int columnIndex) {
200         return 0;
201     }
202 
203     @Override
204     public int getType(int columnIndex) {
205         return 0;
206     }
207 
208     /*
209      * 判断列是否为空值
210      */
211     @Override
212     public boolean isNull(int columnIndex) {
213         return false;
214     }
215 
216     /*使光标暂时失效*/
217     @Override
218     public void deactivate() {
219         
220     }
221     /*使光标再次生效,通常在deactivate后调用*/
222     @Override
223     public boolean requery() {
224         return false;
225     }
226 
227     /*关闭光标,释放资源*/
228     @Override
229     public void close() {
230     }
231 
232     @Override
233     public boolean isClosed() {
234         return false;
235     }
236 
237     /*下面是一系列回调的注册与注销*/
238     @Override
239     public void registerContentObserver(ContentObserver observer) {
240     }
241 
242     @Override
243     public void unregisterContentObserver(ContentObserver observer) {
244     }
245 
246     @Override
247     public void registerDataSetObserver(DataSetObserver observer) {
248     }
249     @Override
250     public void unregisterDataSetObserver(DataSetObserver observer) {
251     }
252     @Override
253     public void setNotificationUri(ContentResolver cr, Uri uri) {
254     }
255     @Override
256     public Uri getNotificationUri() {
257         return null;
258     }
259 
260     /*返回true 启用onMove*/
261     @Override
262     public boolean getWantsAllOnMoveCalls() {
263         return true;
264     }
265 
266     @Override
267     public Bundle getExtras() {
268         // TODO Auto-generated method stub
269         return null;
270     }
271 
272     @Override
273     public Bundle respond(Bundle extras) {
274         // TODO Auto-generated method stub
275         return null;
276     }
277 
278 }

 

posted @ 2015-11-27 23:43  f9q  阅读(166)  评论(0)    收藏  举报