반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 어은동맛집
- 타입스크립트
- 자바
- html
- 궁동
- 몰입캠프
- 알고리즘
- 카이스트
- nodeJS
- 자바스크립트
- DP
- computergraphics
- glfw
- BFS
- 프래그먼트
- 몰입캠프후기
- node.js
- MySQL
- 리사이클러뷰
- 백준
- 컴퓨터그래픽스
- 분리집합
- 안드로이드스튜디오
- 카이스트맛집
- 앱개발
- 위상정렬
- 후기
- 프로그래머스
- 대전맛집
- 우선순위큐
Archives
- Today
- Total
소근소근
안드로이드 스튜디오 연락처 연동 - 삭제하기 / RecyclerView에서 아이템 스와이프시 삭제하기[AndroidStudio-JAVA] 본문
AndroidStudio
안드로이드 스튜디오 연락처 연동 - 삭제하기 / RecyclerView에서 아이템 스와이프시 삭제하기[AndroidStudio-JAVA]
JJureng 2021. 7. 5. 20:57728x90
반응형
SMALL
지난번 업로드에서 다룬 '리사이클러뷰에서 스와이프로 아이템 위치 변경 및 삭제'에 코드를 추가하여,
스와이프시 연락처가 리사이클러뷰 에서도 지워지고, 실제 연락처에서 삭제되도록 구현하였다.
링크
[AndroidStudio] - 리사이클러뷰(RecyclerView) 스와이프(swipe)로 아이템 이동 및 삭제 구현[AndroidStudio-JAVA]
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
AndroidManifest.xml파일에서 먼저 권한 허용을 해준다.
리사이클러뷰에 번호들을 보여주는 구조라서, 리사이클러 어댑터 클래스에서 삭제 기능을 구현한다.
public class PhoneAdapter extends RecyclerView.Adapter<PhoneAdapter.MyViewHolder> implements ItemTouchHelperListener {
ContentResolver cr;
public PhoneAdapter(ArrayList<String> numbook , ArrayList<String> namebook , ArrayList<Bitmap> photobook){
}
@Override
public boolean onItemMove(int from_position, int to_position) {
}
@Override
public void onItemSwipe(int position) {
String number = numbook.get(position);
long ID = getContactIDFromNumber(cr,number);
String where = ContactsContract.RawContacts.CONTACT_ID + "=" + String.valueOf(ID);
cr.delete(ContactsContract.RawContacts.CONTENT_URI , where, null);
namebook.remove(position);
numbook.remove(position);
photobook.remove(position);
notifyItemRemoved(position);
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private TextView phonenum;
private TextView name;
private ImageButton call;
private ImageView photo;
public MyViewHolder(final View view){
super(view);
phonenum = view.findViewById(R.id.tv_phone);
name = view.findViewById(R.id.tv_name);
call = view.findViewById(R.id.ib_call);
photo = view.findViewById(R.id.iv_photo);
cr = view.getContext().getContentResolver();
}
}
@NonNull
@Override
public PhoneAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
}
@Override
public void onBindViewHolder(@NonNull PhoneAdapter.MyViewHolder holder, int position) {
}
@Override
public int getItemCount() {
}
public static long getContactIDFromNumber(ContentResolver contacthelper , String number){
long rawContactId = -1;
Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI , Uri.encode(number));
String [] projection = {ContactsContract.PhoneLookup._ID};
Cursor cursor = null;
try{
cursor = contacthelper.query(contactUri,projection,null,null,null);
if(cursor.moveToFirst()){
rawContactId = cursor.getLong(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID));
}
}catch(Exception e){
e.printStackTrace();
}finally {
if(cursor!=null){
cursor.close();
}
}
return rawContactId;
}
}
getContactIDFromNumber함수로 , 전화번호로 contact id를 구해 리턴한다.
onItemSwipe에서 리턴받은 contact id를 가지고 contentresolver의 delete로 해당 번호를 삭제한다.
이때, 어댑터에서 getContentResolver함수를 쓰기 위해서는 view.getContext().getContentResolver() 로 접근이 가능하므로, 뷰 홀더 클래스에서 해줘야 한다.
728x90
반응형
LIST
'AndroidStudio' 카테고리의 다른 글
안드로이드 앱 화면 회전 방지, 고정하는 방법 (mainactivity, fragment) [ AndroidStudio-JAVA] (0) | 2021.07.06 |
---|---|
리사이클러뷰(RecyclerView) 스와이프(swipe)로 아이템 이동 및 삭제 구현[AndroidStudio-JAVA] (0) | 2021.07.05 |
안드로이드 스튜디오 일정시간 카메라 플래시 켜고 끄기 [AndroidStudio-JAVA] (0) | 2021.07.05 |
EditText 입력 시 키보드 화면 밀림 현상 해결[AndroidStudio-JAVA] (0) | 2021.07.05 |
TabLayout , ViewPager2 , fragment로 탭 구조 구현하기 [AndroidStudio-JAVA] (0) | 2021.07.05 |