java - 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();
}
解决方案
推荐阅读
- python - Windows 上的 python 输入优化?(和Xbox指南按钮可能检测到?)
- google-cloud-platform - Cloud Functions 概览图表显示持续不断的错误流,而错误选项卡和日志不显示任何错误
- c++ - 修复以下场景中未解决的符号“public: void:__thiscall”错误
- sql-server - 检查 NVARCHAR 列是否可以转换为 VARCHAR 列
- css - 使用语义 UI 反应垂直对齐项目
- c# - 如何在 Xamarin 中将 View 绑定到 ViewCell
- angular - 如何在角度中同时使用 *ngIf 和条件?
- gitlab - 如何同时在所有项目中搜索代码?
- integromat - Integromat 中的 Webhook
- r - R:当重复值在下面的行中时删除一行