이번 시간에는 리스트에 있는 사용자를
왼쪽으로 스와이프 해서 사용자 삭제를
하는 방법에 대하여 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.05.17 - [안드로이드] - [안드로이드] Database Room 사용법 part4 - 수정
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 - 화면 구성
2022.03.20 - [안드로이드] - [안드로이드] ToDoList SQLite 만드는 방법 part1 - 화면과 DB
2022.03.09 - [안드로이드] - [안드로이드] Firebase 시작하기 실시간 데이터베이스 Realtime Database (간단한 데이터 읽기, 쓰기) part1
[안드로이드 코틀린] 배열 쉽게 만드는 방법 (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 |
댓글 영역