当前位置: 首页 > 知识库问答 >
问题:

游标适配器数据绑定问题

厍和颂
2023-03-14

我在我的应用程序中使用了光标适配器。适配器绑定到一个listfra片段。listview显示正确。在我的适配器视图中,我有两个文本视图和一个图像视图。在图像视图上,我添加了onClickListener。listview显示正常。但是,当我单击列表中任何索引的图像视图时,它不是获取该索引的数据,而是获取其他索引的数据。

例如,如果我在listview的项目2中单击imageview(列表中的项目位置将为1),则它不是从光标获取该位置的数据,而是获取其他位置的数据(5、6、0等)。我搜索了很多这个问题,但没有找到任何相关的答案。下面是我的光标适配器的代码

public class ClientListAdapter extends CursorAdapter {
    private static final String TAG = "ClientListAdapter";
    private final int PRIMARY_PHOTO_INDEX = 1;
    private final int LAST_NAME_INDEX = 2;
    private final int FIRST_NAME_INDEX = 3;
    private final int CLIENT_GUID_INDEX = 4;
    private NavigateToClientDetailListener mClientDetailListener;

    public ClientListAdapter(Context context, Cursor c, int flags) {
        super(context, c, flags);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        ViewHolder holder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflater.inflate(R.layout.client_list_adapter, parent, false);
        holder.imgClientPhoto = (ImageView) v.findViewById(R.id.imgClientPhoto);
        holder.txtFirstName = (TextView) v.findViewById(R.id.txtFirstName);
        holder.txtLastName = (TextView) v.findViewById(R.id.txtLastName);
        holder.navigateNext = (ImageView) v.findViewById(R.id.navigateNext);
        v.setTag(holder);
        return v;
    }

    @Override
    public void bindView(final View view, final Context context,
            final Cursor cursor) {
        ViewHolder holder = (ViewHolder) view.getTag();

        // byte[] imgByteArray = cursor.getBlob(PRIMARY_PHOTO_INDEX);

        holder.txtLastName.setText(cursor.getString(LAST_NAME_INDEX));
        holder.txtFirstName.setText(cursor.getString(FIRST_NAME_INDEX));

        holder.navigateNext.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.e(TAG, "btnNext onCLick "+" Client Name: "+cursor.getString(LAST_NAME_INDEX)+" "+cursor.getString(FIRST_NAME_INDEX));
                navigateToClientDetail(cursor.getString(CLIENT_GUID_INDEX));
            }
        });
    }

    static class ViewHolder {
        ImageView imgClientPhoto, navigateNext;
        TextView txtLastName, txtFirstName;
    }

    private void navigateToClientDetail(String clientGuid) {
        mClientDetailListener.gotoClientDetail(clientGuid);
    }

    public void setNavigateToClientDetailListener(
            NavigateToClientDetailListener mClientDetailListener) {
        this.mClientDetailListener = mClientDetailListener;
    }
}

共有1个答案

范彭亮
2023-03-14

找到解决方案了。我忘了为每个项目调用bindView。因此,在前面的情况下,cursor.getString(CLIENT_GUID_INDEX)总是返回光标中最后一项的guid ID。我将代码更改为:

final String clientGuid = cursor.getString(CLIENT_GUID_INDEX);

holder.navigateNext.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
       navigateToClientDetailFragment(clientGuid);
    }
});

如果有人觉得我的假设是错误的,并且可能的原因是我对光标适配器不是很熟悉,那么我想发表评论。

 类似资料:
  • 本文向大家介绍Android RecyclerView适配器中的数据绑定,包括了Android RecyclerView适配器中的数据绑定的使用技巧和注意事项,需要的朋友参考一下 示例 也可以在RecyclerView适配器中使用数据绑定。 资料模型 XML布局 转接器类别            

  • 我已经创建了一个绑定适配器来显示毕加索的图片,但它不工作。我有以下错误: 发现数据绑定错误。****/数据绑定错误****Msg:在Android.Widget.ImageView上找不到参数类型为java.lang.String的属性'app:loadPicture'的设置器。文件:/home/groupevsc.com/mathieu_labar/documents/projects/andr

  • 我有一个片段,它显示了带有天气信息的城市列表。我正在使用一个RecolyerView,并试图在我的RecolyerView适配器中实现数据绑定库,但由于某种原因,我得到了以下编译错误: 这是一个自动生成的类,所以我真的不知道错误在哪里。以前,当xml文件中有一些错误时,我在其他布局中也出现了同样的错误,但这里似乎没有问题。 这可能只是一个Android Studio错误,因为xml文件看起来很好。

  • 我尝试将属性和一些数据绑定到模板,但下面的代码不起作用。我需要的是呈现n个模板的数量取决于printedForms对象的数量,并在每个模板中实现来自适当对象的数据。请告诉我我的代码有什么问题。 注意:控制台中有如下警告:[Vue warn]:计算表达式“printedForm.docNumber”时出错:TypeError:无法读取未定义(在组件中找到)的属性“docNumber”) 我的VueJ

  • 因此,我尝试使用Recolyer视图和cursoradapter实现我的数据库,但我得到了错误。我不能很好地理解它们,所以我不知道是我没有正确地实现适配器,还是它是其他的东西。以下是java文件: mainactivity.java: 以下是回收器视图适配器: 最后是我得到的错误: