首页 > 解决方案 > ViewAdapter 正在复制列表视图中的选定项目

问题描述

所以我一直在寻找这个解决方案,得到了一些线索,但始终无法解决。我读到它与被回收的视图有关,但不知道如何阻止它。基本上我有一个列表视图和数组适配器,在列表视图中有复选框,当我检查一个项目并向下滚动时,会再次选择一个随机项目。文本有所不同,但似乎以某种模式检查了这些项目。

感谢帮助!

package com.example.myapplication;

private static final String TAG = viewContacts.class.getSimpleName();
ListView listView_Android_Contacts;
ListView viewContacts;
Cursor c;
CheckBox cb;
ArrayList<String> contacts;
ArrayList<String> listMessages;
LinearLayout linearMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_contacts);
    final ListView viewContacts = findViewById(R.id.contactsView);
    Dexter.withActivity(this)
            .withPermission(Manifest.permission.READ_CONTACTS)
            .withListener(new PermissionListener() {
                @Override
                public void onPermissionGranted(PermissionGrantedResponse response) {
                    get();
                }

                @Override
                public void onPermissionDenied(PermissionDeniedResponse response) {
                    // check for permanent denial of permission
                    if (response.isPermanentlyDenied()) {
                        // navigate user to app settings
                    }
                }

                @Override
                public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                    token.continuePermissionRequest();
                }
            }).check();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_list_item_multiple_choice, contacts
    );
    viewContacts.setAdapter(adapter);
    viewContacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            CheckedTextView checkedTextView = ((CheckedTextView)view);
            checkedTextView.setChecked(!checkedTextView.isChecked());
        }
    });
}

public void get(){

    c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME );
    contacts = new ArrayList<>();
    while(c.moveToNext()){
        String contactName = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phoneNumber = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        contacts.add( contactName + "\n" + phoneNumber);

        Log.d(TAG, "show contacts:");
    }
    c.close();
}

标签: javaandroidlistviewandroid-arrayadapter

解决方案


推荐阅读