【发布时间】:2017-08-30 12:49:02
【问题描述】:
我正在尝试将联系人加载到我的列表视图,但每次(不仅是这个项目)光标加载错误。列表视图有一个复选框,用户从列表中选择,所有值都转到第二个活动。另一方面;我的应用程序无法识别错误的项目,并且选定的项目与其电话号码不匹配。如何解决此重复问题?
注意:我试过了
if (!listtearama.contains(phonenumber)){
listtearama.add(phonenumber);
}
它不起作用。
这就是我的应用程序加载错误的原因。
public class MainActivity extends AppCompatActivity {
ArrayList<String> selectedlist = new ArrayList<>();
ListView chosinglist;
Button kaydet;
ArrayList<String> selectedlistarama = new ArrayList<>();
ArrayList<String> listte = new ArrayList<String>();
ArrayList<String> listtearama = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chosinglist = (ListView) findViewById(R.id.chosing);
chosinglist.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
getNumber(this.getContentResolver());
}
private void getNumber(ContentResolver contentResolver) {
Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (phones != null && phones.getCount() > 0) {
//move to the first element, the cursor might be at an invalid location
phones.moveToFirst();
do {
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phonenumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println(".................." + phonenumber);
listte.add(name);
listtearama.add(phonenumber);
} while (phones.moveToNext());
phones.close();// close cursor
}
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.checkrow,
R.id.checkedTextView2, listte);
kaydet.setEnabled(false);
chosinglist.setAdapter(adapter);
chosinglist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selecteditem = (String) parent.getAdapter().getItem(position);
String aramakicinliste = listtearama.get(position);
if (selectedlistarama.contains(aramakicinliste)) {
selectedlistarama.remove(aramakicinliste);
} else
selectedlistarama.add(aramakicinliste);
if (selectedlist.contains(selecteditem)) {
selectedlist.remove(selecteditem);
} else selectedlist.add(selecteditem);
}
【问题讨论】:
-
您是否尝试过适配器的 notifyDataSetChanged() 方法?
-
是的,我现在试过了。它在第一个活动中不起作用。
-
您如何更新您的适配器?通常流程是:首先更新一个 ArrayList,然后使用该 ArrayList 更新您的 Adapter,然后将 Adapter 设置为您的 ListView。使用 notifyDataSetChanged(),如果 Arraylist 的元素发生变化,Adapter 会收到通知并更新 ListView。
-
我不需要再次更新适配器以传递给第二个活动。用户只从列表视图中选择。没有更多更新,因为选定的项目进入我的数据库。只是我想加载列表视图对。我现在正在编辑我的问题。
标签: android listview android-contentprovider