gpt4 book ai didi

带有自定义 BaseAdapter 的 Android CursorLoaded

转载 作者:太空狗 更新时间:2023-10-29 13:35:09 24 4
gpt4 key购买 nike

我一直在寻找如何做到这一点,但我的发现还很短。

我在我的应用程序中实现了一个 ContentProvider。我的 fragment 使用 CursorLoader 回调来查询 ContentProvider。

SimpleCursorAdapter 通常用于呈现结果,但是,我想创建一个自定义基础适配器,以便在显示时使用节标题修改这些结果。

我的总体问题是,如何将游标的结果传递到自定义 BaseAdapter?

谢谢。

最佳答案

我要做的是创建一个从 CursorAdapter 扩展的 CustomCursorAdapter。

这是一个你可以使用的例子:)

public class ContactListCustomCursorAdapter extends CursorAdapter {

private static final String TAG = ContactListCustomCursorAdapter.class.getName();
private LayoutInflater mInflater;

public ContactListCustomCursorAdapter(Context context) {
super(context, null, false);
mInflater = LayoutInflater.from(context);
}

在构造函数中,您可以获取 layoutInflater 以便稍后为每个 View 充气。

@Override
public void bindView(View view, Context context, Cursor cursor) {
contactName = cursor.getString(cursor
.getColumnIndex(Contacts.DISPLAY_NAME));
currentId = cursor.getLong(cursor.getColumnIndex(Contacts._ID));
currentChar = contactName.substring(0, 1);
ViewHolder mHolder = (ViewHolder) view.getTag();

if (cursor.isFirst()) {
mHolder.header.setVisibility(View.VISIBLE);
mHolder.charHeader.setText(currentChar);
mHolder.fistContactBackground.setVisibility(View.VISIBLE);
mHolder.normalBackground.setVisibility(View.GONE);
} else {
cursor.moveToPrevious();
previousChar = cursor.getString(
cursor.getColumnIndex(Contacts.DISPLAY_NAME)).substring(0,
1);
if (collator.compare(currentChar, previousChar) != 0) {
mHolder.header.setVisibility(View.VISIBLE);
mHolder.charHeader.setText(currentChar);
mHolder.fistContactBackground.setVisibility(View.VISIBLE);
mHolder.normalBackground.setVisibility(View.GONE);
} else {
mHolder.header.setVisibility(View.GONE);
mHolder.fistContactBackground.setVisibility(View.GONE);
mHolder.normalBackground.setVisibility(View.VISIBLE);
}
cursor.moveToNext();
}
}

在绑定(bind) View 上,我这样做是为了了解某行是否与其之前的名称不同,以及是否显示分隔符标题。

@Override
public Object getItem(int position) {
}

在 getItem 上,您可以返回一个对象或外部操作所需的内容,例如列表元素上的点击。

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mInflater.inflate(R.layout.contact_row, parent, false);
ViewHolder refHolder = new ViewHolder();
refHolder.name = (TextView) view
.findViewById(R.id.contact_row_name_textView);
refHolder.setContactPhoto((ImageView) view
.findViewById(R.id.contact_row_photo_ImageView));
refHolder.header = (LinearLayout) view
.findViewById(R.id.contact_row_separator);
refHolder.charHeader = (TextView) view
.findViewById(R.id.contact_separator_char_textview);
refHolder.normalBackground = view.findViewById(R.id.normal_background);
refHolder.fistContactBackground = view
.findViewById(R.id.first_contact_background);
view.setTag(refHolder);
return view;
}

public static class ViewHolder implements ViewHolderInterface {
private LinearLayout header;
private TextView name;
private ImageView contactPhoto;
private TextView charHeader;
private View normalBackground;
private View fistContactBackground;
}

viewHolder 用于加速 View 搜索,在 newView 上设置组件并将它们存储在标签对象中。

在您的 Activity 或 fragment 上,只需在加载时设置光标。

    @Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor currentCursor) {
contactsAdapter.changeCursor(currentCursor);
}

现在你可以过滤或任何你想要的,光标将由加载程序处理:)

问候。

关于带有自定义 BaseAdapter 的 Android CursorLoaded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11395425/

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