newView(),bindView()滚动带复选框

时间:2015-04-01 01:51:08

标签: android listview checkbox scroll cursor

我想制作联系人选择器并从developer.android.com下载示例应用程序 - 现在我正在尝试添加联系人列表的复选框。

然而,我发现当我尝试scolling时,随机复选框设置。

经过一周的搜索,我了解到这是因为回收了视图,并发现许多文章解决了getView()的问题。

但是,我不能使用为getView()显示的答案和示例,因为我的代码 - 最初来自developer.android.com - 正在使用newView(),bindView()。

我还找到了一些答案,建议在数据库中添加一个关于是否已检查的布尔数的新列,但是我从Caontacts获取数据,因此我无法修改数据库。所以,我不能使用这个解决方案。

你能帮帮我吗?这是我的代码 - 与developer.android.com的示例几乎相同。

    public void bindView(final View view, final Context context, final Cursor cursor) {
    final ViewHolder holder = (ViewHolder) view.getTag();
    final String photoUri = cursor.getString(ContactsQuery.PHOTO_THUMBNAIL_DATA);

    final String displayName = cursor.getString(ContactsQuery.DISPLAY_NAME);
    final int startIndex = indexOfSearchQuery(displayName);
        if (startIndex == -1) {
            holder.text1.setText(displayName);
            if (TextUtils.isEmpty(mSearchTerm)) {
                holder.text2.setVisibility(View.GONE);
            } else {
                holder.text2.setVisibility(View.VISIBLE);
            }
        } else {

        final SpannableString highlightedName = new SpannableString(displayName);


        holder.text2.setVisibility(View.GONE);
        }


        final Uri contactUri = Contacts.getLookupUri(
                cursor.getLong(ContactsQuery.ID),
                cursor.getString(ContactsQuery.LOOKUP_KEY));

        final CheckBox checkbox = (CheckBox)view.findViewById(R.id.checkbox);
        final  int position = cursor.getPosition();

        checkbox.setOnCheckedChangeListener(null);
        checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
             //// SHOULD I TO SOMETHING HERE???
            }
        });

0 个答案:

没有答案