Android 自定义光标适配器

标签 android android-cursoradapter

我已经为联系人应用程序创建了一个应用程序。我的自定义光标适配器有一个问题,它有两个 TextView 和 ImageView ,每次我向上和向下滚动时,图像都会在另一个列表项上重复。任何人都可以在这方面帮助我。提前致谢。

这是代码

@Override
public void bindView(View view, Context context, Cursor cursor) {
    if(view !=null){

        ViewHolder holder = initViewHolder(view);

        holder.displayName.setText(getUserDisplayName(cursor.getString(userid)));
        holder.groupId.setText(cursor.getString(group));

                holder.displayPhoto.setImageURI(imageUri);

    }

}

private ViewHolder initViewHolder(View view) {
    ViewHolder innerViewHolder = null;
    if(innerViewHolder == null){
        innerViewHolder = new ViewHolder();
        innerViewHolder.displayName  =(TextView) view.findViewById(R.id.name);
        innerViewHolder.groupId = (TextView) view.findViewById(R.id.groupId);
        innerViewHolder.displayPhoto = (ImageView) view.findViewById(R.id.photo);
    }
    return innerViewHolder;
}


class ViewHolder{
    TextView displayName;
    TextView groupId;
    ImageView displayPhoto;
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return inflater.inflate(R.layout.contact_list_item, null);
}

最佳答案

下面是 newView() 和 bindView() 的示例实现。

public View newView(Context context, Cursor cursor, ViewGroup parent) {
    View view = inflater.inflate(R.layout.list_item_whatever, null);
    ViewHolder holder = new ViewHolder();
    holder.displayName = (TextView) view.findViewById(R.id.name);
    holder.groupId = (TextView) view.findViewById(R.id.groupId);
    holder.displayPhoto = (ImageView) view.findViewById(R.id.photo);
    view.setTag(holder);
    return view;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    ViewHolder holder = (ViewHolder) view.getTag();
    if (holder.displayName != null) {
        holder.displayName.setText(getUserDisplayName(cursor.getString(userid)));
    }
    if (holder.groupId != null) {
        holder.groupId.setText(cursor.getString(group));
    }
    if (holder.displayPhoto != null) {
        holder.displayPhoto.setImageURI(imageUri);
    }
}

此外,对于 imageUri,您可能也想从光标中获取它...
目前,您对所有列表项使用相同的 URI

关于Android 自定义光标适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242331/

相关文章:

android - Android Studio Gradle同步问题:红色变量名随处可见

java - Values.xml中的Android资源编译错误

android - 将我的 Swift 应用程序转换为 Phonegap 的最佳方式?

android - 如何覆盖 CursorAdapter 的 getItemId(int pos) 方法?

android - 带有 Assets 数据库的 CursorAdapter

android - React Native Android 获取设备的比率

android - 如何在android中的同一个 Activity 中打开三个html页面

android - ListView : filtering via Filterable vs. 使用新 URI 重新启动 CursorLoader

android - 在 Adapter 或 Fragment 中为 ContactsContract 设置数据的 MIMETYPE

Android - 自定义 AutoCompleteTextView CursorAdaptor - 建议行为