2012-04-07 75 views
0

我用遊標一類擴展BaseAdapter,如何獲得的所有值光標

class NewDefinedAdapter extends BaseAdapter { 

    private Cursor cursorTitle; 
    private TextView title; 
    private LayoutInflater mInflater; 
    private LinearLayout layout; 

    public NewDefinedAdapter(Context text, Cursor cursor) { 
     cursorTitle = cursor; 
     mInflater = LayoutInflater.from(text); 
    } 

    public int getCount() { 
     return cursorTitle.getCount(); 
    } 

    public Object getItem(int arg0) { 
     return arg0; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     layout = (LinearLayout) mInflater.inflate(R.layout.title_list, null); 
     title = (TextView) layout.findViewById(R.id.title); 
     title.setText(cursorTitle.getString(0)); 
     return layout; 
    } 
} 

我調用這個類是這樣的:

cursor.moveToFirst(); 
view.setAdapter(new NewDefinedAdapter(this, cursor)); 

的cursor.getCount()= 10,但Finnaly,我得到了10個相同的結果。之後,我加入cursor.MoveToNext(),程序運行異常:

layout = (LinearLayout) mInflater.inflate(R.layout.title_list, null); 
title = (TextView) layout.findViewById(R.id.title); 
title.setText(cursorTitle.getString(0)); 
cursorTitle.moveToNext(); 
return layout; 

異常信息:

04-07 14:27:28.565: D/AndroidRuntime(26155): Shutting down VM 
04-07 14:27:28.565: W/dalvikvm(26155): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
04-07 14:27:28.575: E/AndroidRuntime(26155): FATAL EXCEPTION: main 
04-07 14:27:28.575: E/AndroidRuntime(26155): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 10 
04-07 14:27:28.575: E/AndroidRuntime(26155): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580) 

所以,我應該得到光標的所有值,謝謝。

回答

1

使用moveToPosition()

//... 
layout = (LinearLayout) mInflater.inflate(R.layout.title_list, null); 
title = (TextView) layout.findViewById(R.id.title); 
cursorTitle.moveToPosition(position); 
title.setText(cursorTitle.getString(0)); 
//... 
+0

是的,它現在可以工作,但我有一個問題:如果「位」是自動增量,什麼是使用MoveToNext()和moveToPosition(位置) – Jake 2012-04-07 14:54:22

+0

@Jake之間的區別moveToPosition()會根據ListView中的行位置來定位遊標,所以你永遠不會超過Cursor邊界。使用'moveToNext()',每次'getView()'時都會移動'Cursor'(我甚至在ListView中需要顯示任何行之前調用方法),並調用方法你擺脫了「光標」限制。 – Luksprog 2012-04-07 15:03:23