【问题标题】:Multichoice ListView多选列表视图
【发布时间】:2016-10-17 12:48:47
【问题描述】:

我需要制作联系人的多选列表视图,当我点击确认按钮时,应用程序应该将手机号码插入数据库。

listview 片段代码是:

public class MonFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            if (shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS) == true) {
                explain();
            } else {
                //demander l'autorisation
            }
        } else {
            View rootView = inflater.inflate(R.layout.fragment_gestion_contact, container, false);

            final ListView list = (ListView) rootView.findViewById(android.R.id.list);
            final List<String> contacts = retrieveContacts(getActivity().getContentResolver());

            if (contacts != null) {
                list.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, contacts));
            }

            return rootView;
        }
    } else {
        View rootView = inflater.inflate(R.layout.fragment_gestion_contact, container, false);

        final ListView list = (ListView) rootView.findViewById(android.R.id.list);
        final List<String> contacts = retrieveContacts(getActivity().getContentResolver());

        if (contacts != null)
        {
            list.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, contacts));
        }

        return rootView;
    }
    return null;
}

private List<String> retrieveContacts(ContentResolver contentResolver)
{
    final Set<String> contacts = new HashSet<String>();
    final Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, new String[] { ContactsContract.Data.DISPLAY_NAME, ContactsContract.Data._ID, ContactsContract.Contacts.HAS_PHONE_NUMBER }, null, null, null);

    if (cursor == null)
    {
        Log.e("retrieveContacts", "Cannot retrieve the contacts");
        return null;
    }

    if (cursor.moveToFirst() == true)
    {
        do
        {
            final long id = Long.parseLong(cursor.getString(cursor.getColumnIndex(ContactsContract.Data._ID)));
            final String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            final int hasPhoneNumber = cursor.getInt(cursor.getColumnIndex(ContactsContract.Data.HAS_PHONE_NUMBER));

            if (hasPhoneNumber > 0)
            {
                contacts.add(name);
            }
        }
        while (cursor.moveToNext() == true);
    }

    if (cursor.isClosed() == false)
    {
        cursor.close();
    }

    final List<String> sortedContacts = new ArrayList<String>(contacts);
    Collections.sort(sortedContacts);

    return sortedContacts;
}
private void askForPermission() {
    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 2);
}

private void explain() {
    askForPermission();

}

还有我的活动:

public class GestionContact  extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gestion_contact);

    //Récupère le fragment permettant d'accèder à la liste des contacts

    getSupportFragmentManager().beginTransaction().replace(R.id.fragmentLayout,new MonFragment()).commit();
}

我想在名称附近制作一个选定的案例。

【问题讨论】:

    标签: android sqlite listview


    【解决方案1】:

    您可以浏览 android 开发者区块。供参考,您可以使用this link

    它将为您提供有关 android 联系人的完整详细信息。

    【讨论】:

      【解决方案2】:

      您可以按照此代码作为参考

      ArrayAdapter 适配器 = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, listContent); myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

          myList.setAdapter(adapter);
          getChoice.setOnClickListener(new Button.OnClickListener(){
              @Override
              public void onClick(View v) {
                  String selected = "";
                  int cntChoice = myList.getCount();
      
                  SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions();
                  for(int i = 0; i < cntChoice; i++){ 
                      if(sparseBooleanArray.get(i)) { 
                          selected += myList.getItemAtPosition(i).toString() + "\n";
                      }
                  }
      
                  Toast.makeText(MainActivity.this, selected, Toast.LENGTH_LONG).show();
              }});
      

      【讨论】:

        【解决方案3】:

        当我单击按钮 getChoice 时,我只想获取 numerotel 但现在它需要 name 和 numerotel

        像这样:

        检索姓名+号码的联系人:

            private List<String> retrieveContacts(ContentResolver contentResolver)
        {
            final Set<String> contacts = new HashSet<String>();
            final Cursor cursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
        
            if (cursor == null)
            {
                Log.e("retrieveContacts", "Cannot retrieve the contacts");
                return null;
            }
        
            if (cursor.moveToFirst() == true)
            {
                do
                {
                    final long id = Long.parseLong(cursor.getString(cursor.getColumnIndex(ContactsContract.Data._ID)));
                    final String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    final String numerotel = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    final int hasPhoneNumber = cursor.getInt(cursor.getColumnIndex(ContactsContract.Data.HAS_PHONE_NUMBER));
        
                    if (hasPhoneNumber > 0)
                    {
                        contacts.add(name + " " + numerotel);
                    }
                }
                while (cursor.moveToNext() == true);
            }
        
            if (cursor.isClosed() == false)
            {
                cursor.close();
            }
        
            final List<String> sortedContacts = new ArrayList<String>(contacts);
            Collections.sort(sortedContacts);
        
            return sortedContacts;
        }
        

        OnCreateView :

            @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        { View rootView = inflater.inflate(R.layout.fragment_gestion_contact, container, false);
        
                    final ListView list = (ListView) rootView.findViewById(android.R.id.list);
                    final List<String> contacts = retrieveContacts(getActivity().getContentResolver());
        
        
                    if (contacts != null) {
                        list.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_multiple_choice, contacts));
                        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                        getChoice = (Button) rootView.findViewById(R.id.getchoice);
                        getChoice.setOnClickListener(new Button.OnClickListener(){
        
        
        
                            @Override
        
                            public void onClick(View v) {
        
                                // TODO Auto-generated method stub
        
        
        
                                String selected = "";
        
        
        
                                int cntChoice = list.getCount();
        
                                SparseBooleanArray sparseBooleanArray = list.getCheckedItemPositions();
        
                                for(int i = 0; i < cntChoice; i++){
        
                                    if(sparseBooleanArray.get(i)) {
        
                                        selected += list.getItemAtPosition(i).toString() + "\n";
        
        
        
                                    }
        
                                }
        
        
        
                                Log.d("CONFIRMATION", selected);
        
                            }});
                    }
                    return rootView;
                }
        

        我只想要选中时的数字 += list.getItemAtPosition(i).toString() + "\n";

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-31
          • 1970-01-01
          • 1970-01-01
          • 2022-11-29
          • 1970-01-01
          相关资源
          最近更新 更多