我有一个自定义适配器。在我的getView()
中,我正在尝试使用我的联系人列表填充“holder.contact”,但没有成功。我确实有这种用联系人填充ListView
的方法,但它会破坏我CheckBoxes
的功能。此代码不在我的CustomAdapter
类中:
public void populateContactList() {
// Build adapter with contact entries
Cursor cursor = getContacts();
String[] fields = new String[] {
ContactsContract.Data.DISPLAY_NAME
};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor,
fields, new int[] {R.id.contactEntryText});
lv.setAdapter(adapter);
} // END POPULATECONTACTLIST
public Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
(false ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
} // END GETCONTACTS
但是我试图在这里定义它,但没有成功(Custom Adapter类):
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
View rowView = convertView;
ViewHolder holder = null;
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
// HERE I AM INFLATING LISTVIEW LAYOUT.
rowView = inflater.inflate(R.layout.contact_entry, null, false);
holder = new ViewHolder();
holder.photo = (ImageView) rowView.findViewById(R.id.iv_contactPic);
holder.contact = (TextView) rowView.findViewById(R.id.contactEntryText);
holder.tv = (TextView) rowView.findViewById(R.id.SMSCounttext);
holder.cb = (CheckBox) rowView.findViewById(R.id.cb_contactHistoryChk);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
有没有办法在getView()
中应用我的 populateContactList()方法?
我的构造函数看起来像这样。 “elements”已被另一个textview使用:
public CustomAdapter(Context context, int type, ArrayList<String> elements){
super(context, type, elements);
答案 0 :(得分:1)
你的问题有点含糊不清。您有populateContactList()
将Cursor
与Contacts
数据绑定到SimpleCursorAdapter
,并且您希望在另一个自定义getView()
方法中使用此方法Adapter
1}}(如果是这种情况,不要这样做)?或者您想使用自己的适配器并将其与联系人绑定(如果是这种情况,那么请使用查询结果cursor
和您自己的Adapter
)?
您没有说明您的自定义Adapter
扩展到哪种Adapter
。如果它是基于Cursor
的{{1}},那么事情很简单,您可以使用Adapter
和bindView
来访问游标数据(并传递newView
从构造函数中的Cursor
(到超类))。否则,将getContacts()
中的Cursor
数据放入getContacts()
之类的结构中,并将其用作适配器的数据。 (我建议选择第一个选项)。
此外,您的工作是保持行布局中ArrayList
的状态(这里有很多关于如何执行此操作的问题)。
编辑:
CheckBoxes
编辑:
使用元素 ArrayList<String> names = new ArrayList<String>();
Cursor cursor = getContacts();
while (cursor.moveToNext()) {
names.add(cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME )));
}
并将其绑定到行:
ArrayList