gpt4 book ai didi

Android:在 ListView 中使用之前修改来自 Content Provider 的数据

转载 作者:行者123 更新时间:2023-11-29 00:48:04 25 4
gpt4 key购买 nike

我正在使用 ListView 显示数据来查询 Android 中的 ContactsContract.Data 表。

有没有办法在显示之前修改从 Content Provider 返回的数据?

这是一个具体的例子:

我可以在 ContactsContract.Data 中查询 STARRED 列,该列将返回“0”或“1”,但如果我想改为将“0”转换为“未加星标”,将“1”转换为“加星标”

这是我现有的代码:

 private void populateList() {
// Start with the cursor
Cursor cursor = getContacts();
// Then the adapter
String[] fields = new String [] {
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.Data.CONTACT_STATUS,
// WOULD LIKE THIS FIELD TO BE MODIFIED
ContactsContract.Data.STARRED
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.aa_list_activity_row_sjp,
//android.R.layout.simple_list_item_multiple_choice,
cursor,
fields,
new int [] {
R.id.rowText1,
R.id.rowText2,
R.id.rowText3
});
// end with "setListAdapter"
setListAdapter(adapter);
}

private Cursor getContacts() {
// Setup the query and return a cursor
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String [] projection = new String [] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.CONTACT_STATUS,
ContactsContract.Contacts.STARRED
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
String [] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

我不确定这是否可能,但我不想将 STARRED 列的值直接插入到我的 View 中,而是想先对列值进行一些有条件的编辑。

有什么建议吗?

非常感谢,史蒂夫

最佳答案

您可以尝试子类化 SimpleCursorAdapter 并实现该方法

public void setViewText(TextView v, String text) {
if (v.getId() == R.id.rowText3) {
text = "0".equals(text) ? "not starred" : "starred";
}
v.setText(text);
}

关于Android:在 ListView 中使用之前修改来自 Content Provider 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com