목록리스트뷰 (4)
study record
구현한지 조금 지나서 남기게 됐지만 나도 이 기능을 구현하기 위해서 굉장히 많이 구글링하고 고생했기 때문에 꼭 글을 남기려고 한다. 내가 구현하고자 했던 기능은 리스트뷰의 각 아이템에서 버튼을 누르면 데이터베이스에 저장이 되고 저장된 아이템들은 다시 돌아왔을 때 눌러진 상태여야 한다는 것이다. 찾아보니 버튼으로 이것을 구현하기 보다는 체크박스로 구현하는 것이 더 편할 것 같아 체크박스로 즐겨찾기(찜하기) 기능을 구현하였다. public boolean isCheck[] = new boolean[50]; 일단 프래그먼트 클래스 상단에 boolean 배열을 선언한다. 그리고 Adapter의 getView() 메소드 안에 다음의 코드를 넣었다. CheckBox favoriteBtn = (CheckBox) v.f..
listView.setSelection(position); 원래는 이거 하나면 리스트뷰의 리스트 중 원하는 아이템을 원하는 위치에 고정시킬 수 있었다. 그런데 원하는 아이템을 업데이트시키려고 했을 때, 잘 바뀌지 않는 문제가 있었다. 아래의 코드로 바꾸고 나니 잘 업데이트되었다. listView.post(new Runnable() { @Override public void run() { if (null != listView) { listView.clearFocus(); listView.requestFocusFromTouch(); listView.setSelection(firstPosition); } } });
- 리스트 안의 버튼 클릭 이벤트는 어뎁터의 getView() 메소드를 이용하면 편하게 진행할 수 있다. position 변수가 존재하기 때문에 편하게 원하는 기능들을 구현할 수 있다. getView()메소드에서 view.findViewById(R.id.button)이런 식으로 버튼을 가져오면 된다. 나는 이 메소드를 잘 모른 채, 더 안 쪽의 클래스에서 버튼 클릭 이벤트를 진행하려다가 많이 헤맸다.. 구글링의 중요성.. 클래스 간 데이터 전달 등등 찾아보다가 extends Application 까지 하고 심지어 거의 성공했다.. 암튼 구글링을 많이 하면 삽질을 덜 할 수 있다는 교훈..
listView.setSelection(position); 이 코드 한 줄이면 리스트뷰 스크롤을 원하는 위치(최상단)로 구현할 수 있다. 클릭이벤트에서 얻은 position을 넣어주면 원하는 대로 클릭한 아이템이 맨 위로 가게 된다. 내 경우에는 두 개의 프래그먼트 각각에서 두 개의 리스트뷰를 썼기 때문에 다음의 프래그먼트로 데이터를 전달해주었다. position을 bundle을 통해 보내고 받아서 원하는 대로 구현하였다. 리스트뷰 스크롤 위치를 이동시키기 완성~