
이번 시간에는 리스트에 있는 사용자를
왼쪽으로 스와이프 해서 사용자 삭제를
하는 방법에 대하여 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.05.17 - [안드로이드] - [안드로이드] Database Room 사용법 part4 - 수정
[안드로이드] Database Room 사용법 part4 - 수정
이번 시간에는 리스트에 있는 사용자를 선택하면 수정 화면으로 이동하여 사용자 정보를 변경하는 방법을 알아보겠습니다. 이전 포스팅은 아래 링크를 들어가시면 됩니다. 2022.05.16 - [안드로이
aries574.tistory.com
build.gradle(Module:프로젝트명:app)
dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.
implementation 'com.github.xabaras:RecyclerViewSwipeDecorator:1.4'
setting.gradle
repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.
maven { url 'https://jitpack.io' }
- 추가 -
사용자 삭제 메서드
//사용자 삭제
public void deleteUser(int position){
this.userList.remove(position);
}
- 전체 코드 -
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder>{
List<User> userList;
Context context;
public UserAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.list_item, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
int mPosition = holder.getAdapterPosition();
holder.nameText.setText(userList.get(mPosition).userName);
holder.ageText.setText(userList.get(mPosition).userAge);
//수정화면으로 이동
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, UpdateActivity.class);
intent.putExtra("uId", userList.get(mPosition).uid);
intent.putExtra("userName", userList.get(mPosition).userName);
intent.putExtra("userAge", userList.get(mPosition).userAge);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return this.userList.size();
}
//리스트 저장
public void setUserList(List<User> userList){
this.userList = userList;
notifyDataSetChanged();
}
//사용자 삭제
public void deleteUser(int position){
this.userList.remove(position);
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView nameText, ageText;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
nameText = itemView.findViewById(R.id.name_text);
ageText = itemView.findViewById(R.id.age_text);
}
}
}
- 추가 -
제스처 기능 구현
onSwiped 제스처 기능 구현
onChildDraw 제스처 그림 구현
//삭제 제스처
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getBindingAdapterPosition();
switch(direction){
case ItemTouchHelper.LEFT:
//사용자 클래스 생성
User user = new User();
user.uid = userList.get(position).uid;
//아이템 삭제
adapter.deleteUser(position);
//아이템 삭제 화면 재정리
adapter.notifyItemRemoved(position);
//DB생성
AppDatabase db = AppDatabase.getDBInstance(getApplicationContext());
//삭제 쿼리
db.userDao().userDelete(user);
break;
}
}
//제스처 그림 구현
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
new RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder,
dX, dY, actionState, isCurrentlyActive)
.addSwipeLeftBackgroundColor(Color.RED) //왼쪽 스와프 배경 색상
.addSwipeLeftActionIcon(R.drawable.ic_delete) //왼쪽 스와프 아이콘
.addSwipeLeftLabel("삭제") //왼쪽 스와프 텍스트 설정
.setSwipeLeftLabelColor(Color.WHITE) //왼쪽 스와프 텍스트 색상
.create() // 생성
.decorate();
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}).attachToRecyclerView(recyclerView); //RecyclerView에 적용
아이콘 res -> drawable
- 전체 코드 -
public class MainActivity extends AppCompatActivity {
UserAdapter adapter;
List<User> userList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FloatingActionButton fab = findViewById(R.id.insertBtn);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, InsertUserActivity.class);
activityResult.launch(intent);
}
});
//RecyclerView 초기화 및 설정
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//UserAdapter 초기화
adapter = new UserAdapter(MainActivity.this);
//RecyclerView Adapter 설정
recyclerView.setAdapter(adapter);
//사용자 조회
loadUserList();
//삭제 제스처
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getBindingAdapterPosition();
switch(direction){
case ItemTouchHelper.LEFT:
//사용자 클래스 생성
User user = new User();
user.uid = userList.get(position).uid;
//아이템 삭제
adapter.deleteUser(position);
//아이템 삭제 화면 재정리
adapter.notifyItemRemoved(position);
//DB생성
AppDatabase db = AppDatabase.getDBInstance(getApplicationContext());
//삭제 쿼리
db.userDao().userDelete(user);
break;
}
}
//제스처 그림 구현
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
new RecyclerViewSwipeDecorator.Builder(c, recyclerView, viewHolder,
dX, dY, actionState, isCurrentlyActive)
.addSwipeLeftBackgroundColor(Color.RED) //왼쪽 스와프 배경 색상
.addSwipeLeftActionIcon(R.drawable.ic_delete) //왼쪽 스와프 아이콘
.addSwipeLeftLabel("삭제") //왼쪽 스와프 텍스트 설정
.setSwipeLeftLabelColor(Color.WHITE) //왼쪽 스와프 텍스트 색상
.create() // 생성
.decorate();
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}).attachToRecyclerView(recyclerView); //RecyclerView에 적용
}
//액티비티 백그라운드에 있는데 호출되면 실행
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//사용자 조회
loadUserList();
}
ActivityResultLauncher<Intent> activityResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == RESULT_OK){
//사용자 조회
loadUserList();
}
}
}
);
//사용자 조회
private void loadUserList() {
AppDatabase db = AppDatabase.getDBInstance(this.getApplicationContext());
userList = db.userDao().getAllUser();
//리스트 저장
adapter.setUserList(userList);
}
}
2022.04.08 - [안드로이드] - [안드로이드] Tab Custom Animation part1 - 화면 구성
[안드로이드] Tab Custom Animation part1 - 화면 구성
이번 시간부터 TabLayout을 직접 만들어 애니메이션까지 넣어보는 방법을 알아보겠습니다. 이번 포스팅은 화면 구성을 해보겠습니다. 목차 1. 실행 화면 2. 테마 변경 3. 배경 색상 파일 만들기(drawab
aries574.tistory.com
2022.03.20 - [안드로이드] - [안드로이드] ToDoList SQLite 만드는 방법 part1 - 화면과 DB
[안드로이드] ToDoList SQLite 만드는 방법 part1 - 화면과 DB
이번 시간에는 ToDoList SQLite 할 일 목록 화면과 DB부분을 만들어 보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. ToDo 클래스 만들기 4. ToDo DB 만들기 5. ToDo 화면 만들기 6. 메인 화면 구성 acti..
aries574.tistory.com
2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1
[안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part
이번 시간에는 Firebase를 통해 데이터베이스에 간단한 데이터를 쓰고 읽는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 프로젝트 만들기 3. 앱 만들기 4. 데이터 베이스 만들기 5. 라이브러
aries574.tistory.com
| [안드로이드 코틀린] 배열 쉽게 만드는 방법 (0) | 2022.05.20 |
|---|---|
| [안드로이드 코틀린] 변수 생성 및 변수 타입 만드는 방법 (0) | 2022.05.19 |
| [안드로이드] Database Room 사용법 part4 - 수정 (0) | 2022.05.17 |
| [안드로이드] Database Room 사용법 part3 - 리스트 (0) | 2022.05.16 |
| [안드로이드] Database Room 사용법 part2 - 데이터 등록 (0) | 2022.05.15 |
댓글 영역