ViewAdapter дублирует выбранные элементы в списке - PullRequest
0 голосов
/ 09 января 2020

Итак, я искал это решение повсюду, получил некоторые предложения, но так и не смог его решить. Я читал, что это как-то связано с перерабатываемым видом, но не могу понять, как это остановить. По сути, у меня есть список и адаптер массива, в списке есть флажки, и когда я проверяю элемент и прокручиваю вниз, снова выбирается случайный элемент. Текст другой, но кажется, что элементы проверены по какому-то шаблону.

Оцените помощь!

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();
}
...