728x90
반응형
최종 목표
- 음성녹음 버그 수정
- TODO 기능 추가하기 (푸시 알림 기능도 구현해보도록 하자)
- 메모 리스트 좌우로 슬라이드 하면 삭제 되도록 하기
오늘의 목표
- 스와이프 메뉴 구현하기
참고
https://karrel.tistory.com/13?category=626726
진행 과정
1. 리사이클러 뷰를 이용한 스와이프 메뉴 만들기
기존에 사용하던 스와이프 메뉴 리스트뷰는 편리하지만 너무 복잡했다.
구글링을 좀더 해본 결과, 리사이클러 뷰 라는것을 사용해보기로했다.
그런데 샘플 코드는 작동이 잘 되지만, 내 코드랑 병합시키려니까 또 오류가 생긴다..(눈물)
일단 샘플 코드는 다음과 같다.
package com.karrel.swipetodeletesample;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.Toast;
import com.karrel.swipetodeletesample.databinding.ActivityMainBinding;
import com.karrel.swipetodeletesample.databinding.ItemRecyclerBinding;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<String> mList = new ArrayList<>();
private ActivityMainBinding mBinding;
private Toast mToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
// make sample data
for (int i = 0; i < 10; i++) {
mList.add(String.format("sample item %s", i + 1));
}
// init recyclerView
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
mBinding.recyclerView.setAdapter(new RecyclerView.Adapter() {
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
CustViewHolder holder1 = (CustViewHolder) holder;
holder1.setData(mList.get(position));
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemRecyclerBinding binding = DataBindingUtil.inflate(LayoutInflater.from(MainActivity.this), R.layout.item_recycler, parent, false);
return new CustViewHolder(binding);
}
@Override
public int getItemCount() {
return mList.size();
}
});
// setup swipe to remove item
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(mBinding.recyclerView);
}
/**
* view holder class
*/
class CustViewHolder extends RecyclerView.ViewHolder {
private ItemRecyclerBinding mBinding;
public CustViewHolder(ItemRecyclerBinding binding) {
super(binding.getRoot());
mBinding = binding;
}
public void setData(String data) {
mBinding.text.setText(data);
}
}
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
showToast("on Move");
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
// 삭제되는 아이템의 포지션을 가져온다
final int position = viewHolder.getAdapterPosition();
// 데이터의 해당 포지션을 삭제한다
showToast("on remove " + mList.remove(position));
// 아답타에게 알린다
mBinding.recyclerView.getAdapter().notifyItemRemoved(position);
}
};
private void showToast(String msg) {
if (mToast != null) mToast.cancel();
mToast = Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT);
mToast.show();
}
}
내가 원하고자 하는 그림은 이런것.
여기서 스와이프하면 대화상자를 띄워서 삭제 여부를 묻는것도 띄워보고 싶은데, 문제는 이게 원래 코드에서 작동이안된다...
2. 왜 안될까?
일단 오류나는 부분은 다음과 같다.
Cannot resolve symbol 'ActivityMainBinding' , 'recylerView' 가 나온다.
이거는 흔히 변수선언이나.. 그런거 안했을때 나오던건데.. 문제는 Gradle에서도 다 implementaion 해줬고 ㅠㅠㅠ 샘플코드랑 다른게 없는데 왜 여기서 에러가 나는지 모르겠다.. 샘플코딩을 해서 감을 잡아야 내꺼를 대입을 하던 말던 하는데..
오늘의 결과
오류 해결하다가 오늘 하루도 다갔다... 빨리끝내야되는데 ㅠㅠ
728x90
반응형
'개발일지 > 멀티메모' 카테고리의 다른 글
[멀티메모] 5일차 (0) | 2019.12.18 |
---|---|
[멀티메모] 3일차 (0) | 2019.12.02 |
[멀티메모] 2일차 (0) | 2019.11.30 |
[멀티메모] 1일차 (0) | 2019.11.26 |