我正在通過SimpleCursorAdapter
從sqlite數據庫檢索數據,並在ListView
上顯示結果。該數據庫持有聯繫信息以及ID字符串。我在列表視圖項目上顯示的兩個項目是一個人的姓名和他們的電話號碼,但我沒有顯示ID字符串(UUID)。識別列表視圖中的項目
所以當用戶按下這個listview中的一個項時,我們如何識別數據庫中相應的行?該項目只包含名稱和編號,但不包含ID列,這意味着我無法在數據庫中找到相應的行。
如何解決此問題而不在列表項中顯示長UUID字符串?
我正在通過SimpleCursorAdapter
從sqlite數據庫檢索數據,並在ListView
上顯示結果。該數據庫持有聯繫信息以及ID字符串。我在列表視圖項目上顯示的兩個項目是一個人的姓名和他們的電話號碼,但我沒有顯示ID字符串(UUID)。識別列表視圖中的項目
所以當用戶按下這個listview中的一個項時,我們如何識別數據庫中相應的行?該項目只包含名稱和編號,但不包含ID列,這意味着我無法在數據庫中找到相應的行。
如何解決此問題而不在列表項中顯示長UUID字符串?
將光標傳遞給SimpleCursorAdapter
包括UUID。僅僅因爲光標包含UUID並不意味着它必須顯示它。然後,當您獲得在OnItemClickListener.onItemClick()中點擊的物品的位置時,將光標移動到Cursor.moveToPosition()的位置,並獲得Cursor.getString()的UUID。
另一種方式(更優雅)是在AdapterView上調用getAdapter()傳遞給onItemClick,然後將適配器轉換爲CursorAdapter並在光標適配器上調用get getItem()。這應該返回指定位置處的光標對象。
OnItemClickListener的onItemClick()方法向您傳遞列表中的位置,並且Adapter有一個方法getItem(int position)。 將結果從getItem()轉換爲Cursor,這將使您的光標初始化爲指向您單擊的行,以便您可以獲取原始查詢中的任何數據,而不管任何視圖中的內容。
例如: cursor.getString(cursor.getColumnIndex(「phoneNumber」)));
在您的行佈局中爲您的ListView
添加另一個TextView
並使此TextView
不可見。 初始化SimpleCursorAdapter
時,將_id
從數據庫中獲取到TextView
。由於此TextView
不可見,因此不會顯示。
String[] from = new String[] { "name", "_id" };
int[] to = new int[] { R.id.name, R.id.your_hidden_textview_id };
SimpleCursorAdapter sadapter = new SimpleCursorAdapter(this,
R.layout.ur_row_layout, ur_cursor, from, to);
在你OnItemClick
爲ListView
只需使用下面的代碼來獲得聯繫ID
public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {
TextView contactid = (TextView) view.findViewById(R.id.your_hidden_textview_id);
String Contact_id = contactid .getText().toString();
}
如何讓textview隱形? –
在行佈局中爲您的textview添加android:visibility =「gone」 –
這非常有用,謝謝nidhi! –
您是否使用了一些自定義適配器來填補的ListView? – Procurares
發佈您如何獲取聯繫信息,您檢索並存儲臨時對象中的哪些數據 –
您可以設置標籤(位置)。我建議你應該(如果不使用)ID。然後,在點擊列表項時,getTag()並將查詢發回表。 (告訴我,看起來是否讓你感到困惑。) – Prachi