2012-06-05 39 views
5

我得到這個問題,由於對這裏的另一個答案,但沒有解釋如何做什麼,我問 How to get the id of the row in onItemClick(ListView) when using a custom Adapter?如何覆蓋CursorAdapter的getItemId(int pos)方法?

這是在這個問題接受的答案是我需要的東西,因爲我也讓我的自己的自定義適配器(CursorAdapter),因此我會有同樣的問題。問題是我不知道如何實現這一點。我正在查看文檔,並且不確定如何從遊標訪問_id列。由於文件沒有固定的,我們可以從我卡住的信息中獲得。任何幫助搞清楚,將不勝感激。

編輯:我不清楚我的問題是什麼,但只是爲了澄清,就像標題一樣,我如何重寫我創建的CursorAdapter自定義類中的getItemId()方法?

+0

我不不理解你的問題...我有幾個自定義的遊標適配器,我從來沒有重寫過,我從遊標中得到行ID很好......你想做什麼,你試圖得到什麼那個ID? – Barak

+0

當我點擊列表視圖中的成員時,我希望能夠進入數據庫並使用該ID訪問該成員信息。所以我需要確保我確實得到了_id。但我不是。 – Andy

+0

我很想看看爲什麼不......你應該是,如果你在列表中使用'onListItemClick'。 – Barak

回答

9

假設你沒有光標爲您的適配器中的一員:

@Override 
public long getItemId(int position) { 
    Cursor cursor = getCursor(); 
    cursor.moveToPosition(position); 
    return cursor.getLong(mCursor.getColumnIndex("_id")); 
} 
+0

啊,所以調用getCursor獲取CursorAdapter正在使用的關聯遊標?應該已經意識到了!謝謝 – Andy

+0

是的,這裏是[getCursor()]的參考(http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29) – Sam

+0

如果你使用的是CursorAdapter而不是SimpleCursorAdapter那麼你應該在newView中設置位置,像這樣:@Override public View newView(Context context,Cursor cursor,ViewGroup parent)LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 持有人。deleteImageView =(ImageView)retView.findViewById(R.id.delete); holder.deleteImageView.setTag(cursor.getPosition()); return retView; } ' – Chetna

4

我nkow這不回答所提出的問題,但山姆注意到照顧。我以爲我會發布這個,因爲似乎有一些OPs部分混淆。

以下是從活動的onListItemClick方法,其包含具有定義光標適配器創建的列表:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Your code here 
} 

long id是用於包含在所述行點擊了數據的行編號(當列表被饋送遊標適配器)。無需覆蓋getItemId

如果您將不同行的信息放入一行,您只需要覆蓋getItemId(以我的經驗)。只要列表行中的所有數據來自數據庫中的同一行,就沒有必要去解決這個問題。

我想換個時間,你可能需要使用這將是,如果你從遊標了數據,並把它變成一個數組,然後使用一個陣列適配器..但似乎很迂迴......

+0

那麼這是我想要的_id行,至少從數據庫。但是我看到你在說什麼 – Andy

+0

**是**行ID(或者_id,如果你喜歡用數據庫列名來考慮它)。這就是爲什麼在提供適配器的任何光標中,需要* _id的柱子...框架使用它並將其傳遞,以便您可以在單擊某條線時使用它。 – Barak

+0

啊。疑難雜症。感謝您的意見。非常感激。 – Andy