Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EAD_联系人)!=PackageManager.权限(已授予) { if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.permission.READ_CONTACTS))_Android_List_Android Recyclerview_Notifydatasetchanged - Fatal编程技术网

Android EAD_联系人)!=PackageManager.权限(已授予) { if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.permission.READ_CONTACTS))

Android EAD_联系人)!=PackageManager.权限(已授予) { if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.permission.READ_CONTACTS)),android,list,android-recyclerview,notifydatasetchanged,Android,List,Android Recyclerview,Notifydatasetchanged,EAD_联系人)!=PackageManager.权限(已授予) { if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.permission.READ_CONTACTS)){ showPopUpCallBack(这是“信息”,getString(R.string.contactRationalMessage),new DialogInterface.OnClickListener(){ @凌驾 public vo

EAD_联系人)!=PackageManager.权限(已授予) { if(ActivityCompat.shouldshowRequestPermissionRegulation(这是Manifest.permission.READ_CONTACTS)){ showPopUpCallBack(这是“信息”,getString(R.string.contactRationalMessage),new DialogInterface.OnClickListener(){ @凌驾 public void onClick(DialogInterface dialog,int which){ if(which==DialogInterface.BUTTON_正值) { RequestPermissionForContacts和Process(); } } }); }否则{ ActivityCompat.requestPermissions(这是新字符串[]{Manifest.permission.READ_CONTACTS},GlobalVariables.CONTACTS_PERMISSIONS); } }否则{ GetAllContacts和Display(); } } @凌驾 public void onRequestPermissionsResult(int-requestCode,字符串权限[],int[]grantResults){ 开关(请求代码){ 案例GlobalVariables.CONTACTS\u权限:{ if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION\u已授予){ GetAllContacts和Display(); } 返回; } } } /** *允许显示联系人列表的方法 */ public void显示联系人列表(){ mContactsChooserAdapter=新联系人SchooseRadapter(getPhoneContacts(),getSelectedContacts()); mContactsChooserAdapter.setOnContactSelectionListener(contactSelectionListener); mLinearLayoutManager=新的LinearLayoutManager(此); mContactsList.setLayoutManager(mLinearLayoutManager); mContactsList.setAdapter(mContactsChooserAdapter); } /** *方法,该方法将检索所有联系人。 */ 私有void GetAllContacts和Display() { mPhoneContacts=新的ArrayList(); 接触; ContentResolver ContentResolver=getContentResolver(); Cursor Cursor=contentResolver.query(ContactsContract.Contacts.CONTENT\u URI,null,null,null,ContactsContract.commondatatypes.Phone.DISPLAY\u NAME+“ASC”); if(cursor.getCount()>0){ while(cursor.moveToNext()){ int hasPhoneNumber=Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 如果(hasPhoneNumber>0){ String id=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.\u id)); String displayName=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 触点=新触点(); setId(Integer.parseInt(id)); contact.setDisplayName(displayName); Cursor phoneCursor=contentResolver.query( ContactsContract.CommonDataTypes.Phone.CONTENT\u URI, 无效的 ContactsContract.CommonDataTypes.Phone.CONTACT_ID+“=?”, 新字符串[]{id}, 无效); if(phoneCursor.moveToNext()){ String phoneNumber=phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER)); contact.getPhoneNumber().add(phoneNumber); } phoneCursor.close(); getPhoneContacts()。添加(联系人); } } } 显示联系人列表(); } /** *方法,该方法允许完成和关闭活动。它返回一个结果。 */ public void finishedChoosingContacts() { 意图=新意图(); intent.putParcelableArrayListExtra(GlobalVariables.CONTACTS_SELECTED_CONTACTS_LABEL,getSelectedContacts()); 设置结果(Activity.RESULT_OK,intent); 完成(); } /** *允许在列表中选择和取消选择联系人的侦听器。 */ private OnContactSelectionListener contactSelectionListener=新建OnContactSelectionListener(){ @凌驾 已选择public void OnContact(联系人){ 如果(getSelectedContacts()==null){ setSelectedContacts(新建ArrayList()); } getSelectedContacts()。添加(联系人); mContactsNbLabel.setText(getSelectedContacts().size()+(getSelectedContacts().size()>1?“contacts”:“contact”); } @凌驾 取消选择公共无效联系人(联系人){ int indexToDelete=-1; 对于(联系人c:getSelectedContacts()){ 如果(c.getId()==contact.getId()){ indexToDelete=getSelectedContacts().indexOf(c); 打破 } } 如果(索引删除>-1){ getSelectedContacts().remove(indexToDelete); mContactsNbLabel.setText(getSelectedContacts().size()+(getSelectedContacts().size()>1?“contacts”:“contact”); } } }; /** *当搜索编辑文本值更改时激发的侦听器。 */ 私有TextWatcher searchViewWatcher=新TextWatcher(){ @凌驾 更改前文本之前的公共void(字符序列s、int start、int count、int after){ } @凌驾 public void onTextChanged(字符序列、int start、int before、int count){ } @凌驾 公共无效后文本已更改(可编辑){ filterListAndUpdate(s.toString()); } }; /** *用于筛选和更新列表的方法 *@param searchedValue */ 私有无效筛选器列表更新(字符串搜索值) { ArrayList associatedSearch=新建ArrayList(); 如果(!“”.equals(searchedValue)&&searchedValue!=null){ 对于(联系人c:getPhoneContacts()){ 如果(c.getDisplayName().toUpperCase().StartWith(searchedValue.toUpperCase())){ 关联搜索。添加(c); } } ((ContactsChooserAdapter)mContactsList.getAdapter()).setContacts(associatedSearch); }否则{ ((ContactsChooserAdapter)mContactsList.getAdapter()).setContacts(getPhoneContacts()); } mContactsList.getAdapter().notifyDataSetChanged(); } /** *允许
public class ContactsChooserAdapter extends RecyclerView.Adapter<ContactChooserViewHolder> {

private ArrayList<Contact> mContacts;
private ArrayList<Contact> mSelectedContacts;
private OnContactSelectionListener mContactListener;

public ContactsChooserAdapter(ArrayList<Contact> contacts, ArrayList<Contact> selectedContacts)
{
    mContacts = contacts;
    mSelectedContacts = selectedContacts;
}

public void setOnContactSelectionListener(OnContactSelectionListener listener)
{
    mContactListener = listener;
}

@Override
public ContactChooserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.contacts_chooser_list_item, parent, false);
    ContactChooserViewHolder holder = new ContactChooserViewHolder(v);
    return holder;
}

@Override
public void onBindViewHolder(ContactChooserViewHolder holder, int position) {
    Contact contact = getContacts().get(position);
    if(isAlreadySelected(contact)){
        holder.mChoosed.setChecked(true);
    }else{
        holder.mChoosed.setChecked(false);
    }

    holder.mContactDisplayName.setText(contact.getDisplayName());
    holder.mContactPhoneNumber.setText(contact.getPhoneNumbers().get(0));
    if(mContactListener != null) {
        holder.bind(contact, mContactListener);
    }
}

@Override
public int getItemCount() {
    return getContacts().size();
}

/**
 * Method which allows to check whenever a contact is already selected in a list or not.
 * @param contact
 * @return
 */
private boolean isAlreadySelected(Contact contact){
    boolean alreadySelected = false;
    if(getAlreadySelectedContacts() != null){
        System.out.println("ALready selected contact list: "+ getAlreadySelectedContacts().size());
        for(Contact c : getAlreadySelectedContacts()){
            if(c.getId() == contact.getId()){
                alreadySelected = true;
                break;
            }
        }
    }
    return alreadySelected;
}


public ArrayList<Contact> getContacts() {
    return mContacts;
}

public void setContacts(ArrayList<Contact> mContacts) {
    this.mContacts = mContacts;
}


public ArrayList<Contact> getAlreadySelectedContacts() {
    return mSelectedContacts;
}

public void setAlreadySelectedContacts(ArrayList<Contact> selectedContacts) {
    this.mSelectedContacts = selectedContacts;
}
 public class ContactsActivity extends AppCompatActivity {

private ArrayList<Contact> mSelectedContacts;
private ArrayList<Contact> mPhoneContacts;
private RecyclerView mContactsList;
private BatifyTextViewBold mContactsNbLabel;
private BatifyEditText mSearchEditText;
private ContactsChooserAdapter mContactsChooserAdapter;
private LinearLayoutManager mLinearLayoutManager;
private RelativeLayout mCancelBtn;
private RelativeLayout mFinishBtn;
private ImageView mSearchIcon;
private RelativeLayout mListHeader;
private RelativeLayout mSearchLayout;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contacts);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = this.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(ContextCompat.getColor(this, R.color.batifyGreen));
    }

    Bundle bundle = getIntent().getExtras();
    ArrayList<Contact> transmittedContacts = bundle.getParcelableArrayList(GlobalVariables.CONTACTS_SELECTED_CONTACTS_LABEL);
    mSelectedContacts = new ArrayList<>();
    if(transmittedContacts != null) {
        mSelectedContacts.addAll(transmittedContacts);
    }

    mContactsList = (RecyclerView)findViewById(R.id.contactsList);
    mContactsNbLabel = (BatifyTextViewBold)findViewById(R.id.contactNbSelectedTv);

    if(getSelectedContacts() == null){
        mContactsNbLabel.setText("0 contact ");
    }else{
        mContactsNbLabel.setText(getSelectedContacts().size() + (getSelectedContacts().size() > 1 ?  " contacts " : " contact "));
    }

    mFinishBtn = (RelativeLayout)findViewById(R.id.finishContactsBtn);
    mFinishBtn.setOnClickListener(finishChoosingContactsListener);

    mCancelBtn = (RelativeLayout)findViewById(R.id.cancelContactsBtn);
    mCancelBtn.setOnClickListener(cancelChoosingContactsListener);

    mSearchIcon = (ImageView)findViewById(R.id.searchBtn);
    mSearchIcon.setOnClickListener(searchListener);

    mListHeader = (RelativeLayout)findViewById(R.id.listHeader);
    mListHeader.setVisibility(View.VISIBLE);

    mSearchLayout = (RelativeLayout)findViewById(R.id.searchLayout);
    mSearchLayout.setVisibility(View.GONE);

    mSearchEditText = (BatifyEditText)findViewById(R.id.searchContactsEditText);
    mSearchEditText.addTextChangedListener(searchViewWatcher);



    requestPermissionForContactsAndProcess();
}


/**
 * Method that requests the permission to access contacts.
 */
public void requestPermissionForContactsAndProcess() {

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)
    {
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {
            Tools.showPopUpCallBack(this, "Information", getString(R.string.contactRationalMessage), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (which == DialogInterface.BUTTON_POSITIVE)
                    {
                        requestPermissionForContactsAndProcess();
                    }
                }
            });

        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, GlobalVariables.CONTACTS_PERMISSIONS);
        }
    }else{
        getAllContactsAndDisplay();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case GlobalVariables.CONTACTS_PERMISSIONS: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                getAllContactsAndDisplay();
            }
            return;
        }
    }
}

/**
 * Method which allows to display a contacts list
 */
public void displayContactList(){
    mContactsChooserAdapter = new ContactsChooserAdapter(getPhoneContacts(), getSelectedContacts());
    mContactsChooserAdapter.setOnContactSelectionListener(contactSelectionListener);
    mLinearLayoutManager = new LinearLayoutManager(this);
    mContactsList.setLayoutManager(mLinearLayoutManager);
    mContactsList.setAdapter(mContactsChooserAdapter);
}

/**
 * Method that will retrieve all contacts.
 */
private void getAllContactsAndDisplay()
{
    mPhoneContacts = new ArrayList<>();
    Contact contact;
    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
    if (cursor.getCount() > 0) {
        while (cursor.moveToNext()) {

            int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
            if (hasPhoneNumber > 0) {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                contact = new Contact();
                contact.setId(Integer.parseInt(id));
                contact.setDisplayName(displayName);

                Cursor phoneCursor = contentResolver.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{id},
                        null);
                if (phoneCursor.moveToNext()) {
                    String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    contact.getPhoneNumbers().add(phoneNumber);
                }

                phoneCursor.close();

                getPhoneContacts().add(contact);
            }
        }
    }
    displayContactList();
}


/**
 * Method which allow to finish and close the activity. It returns a result.
 */
public void finishedChoosingContacts()
{
    Intent intent= new Intent();
    intent.putParcelableArrayListExtra(GlobalVariables.CONTACTS_SELECTED_CONTACTS_LABEL, getSelectedContacts());
    setResult(Activity.RESULT_OK, intent);
    finish();
}


/**
 * Listener which allows to select and deselect a contact in a list.
 */
private OnContactSelectionListener contactSelectionListener = new OnContactSelectionListener() {
    @Override
    public void onContactSelected(Contact contact) {
        if(getSelectedContacts() == null){
            setSelectedContacts(new ArrayList<Contact>());
        }
        getSelectedContacts().add(contact);
        mContactsNbLabel.setText(getSelectedContacts().size() + (getSelectedContacts().size() > 1 ? " contacts " : " contact "));
    }

    @Override
    public void onContactDeSelected(Contact contact) {
        int indexToDelete = -1;
        for(Contact c : getSelectedContacts()){
            if(c.getId() == contact.getId()){
                indexToDelete = getSelectedContacts().indexOf(c);
                break;
            }
        }

        if(indexToDelete > -1) {
            getSelectedContacts().remove(indexToDelete);
            mContactsNbLabel.setText(getSelectedContacts().size() + (getSelectedContacts().size() > 1 ? " contacts " : " contact "));
        }
    }
};

/**
 * Listener which is fired when the search edit text value is changing.
 */
private TextWatcher searchViewWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        filterListAndUpdate(s.toString());
    }
};

/**
 * method used to filter and update the list
 * @param searchedValue
 */
private void filterListAndUpdate(String searchedValue)
{
    ArrayList<Contact> associatedSearch = new ArrayList<>();
    if(!"".equals(searchedValue) && searchedValue != null) {
        for (Contact c : getPhoneContacts()) {
            if (c.getDisplayName().toUpperCase().startsWith(searchedValue.toUpperCase())) {
                associatedSearch.add(c);
            }
        }
        ((ContactsChooserAdapter)mContactsList.getAdapter()).setContacts(associatedSearch);
    }else{
        ((ContactsChooserAdapter)mContactsList.getAdapter()).setContacts(getPhoneContacts());
    }

    mContactsList.getAdapter().notifyDataSetChanged();
}


/**
 * Listener that allows to fire the search listener.
 */
private View.OnClickListener searchListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mListHeader.setVisibility(View.GONE);
        mSearchLayout.setVisibility(View.VISIBLE);
    }
};


/**
 * Listener which is fired when the user cancels the contacts selection.
 */
private View.OnClickListener cancelChoosingContactsListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       finish();
    }
};

/**
 * Listener which id fired when the user finishes selecting contacts.
 */
private View.OnClickListener finishChoosingContactsListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finishedChoosingContacts();
    }
};



public ArrayList<Contact> getSelectedContacts() {
    return mSelectedContacts;
}

public void setSelectedContacts(ArrayList<Contact> mSelectedContacts) {
    this.mSelectedContacts = mSelectedContacts;
}

public ArrayList<Contact> getPhoneContacts() {
    return mPhoneContacts;
}