【问题标题】:How to load contacts to listview correct?如何正确加载联系人到列表视图?
【发布时间】: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


【解决方案1】:

您必须为适配器中的选定项目设置标志。

只需关注适配器类中的更改即可。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if ((convertView == null) || (convertView.getTag() == null)) {
        LayoutInflater mInflater = (LayoutInflater) 
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    convertView.setTag(holder);

    return convertView;
}

【讨论】:

  • 我没有使用 baseadapter。我正在使用 arrayadapter。这些方法使用基本适配器。
猜你喜欢
  • 2023-03-22
  • 2016-09-24
  • 2014-07-12
  • 2019-06-03
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 1970-01-01
相关资源
最近更新 更多