http://egloos.zum.com/zerosum30/v/1188818
참조해서 attr.xml 사용법을 익히시고
attr.xml을 만들어 줍니다.
attr.xml에 해당 링크의 세번째 내용을 붙여넣어 줍니다.
<declare-styleable name="TouchListView">
<attr name="normal_height" format="dimension" />
<attr name="expanded_height" format="dimension" />
<attr name="grabber" format="reference" />
<attr name="dragndrop_background" format="color" />
<attr name="remove_mode">
<enum name="none" value="-1" />
<enum name="fling" value="0" />
<enum name="slide" value="1" />
<enum name="slideRight" value="1" />
<enum name="slideLeft" value="2" />
</attr>
</declare-styleable>
그러면
grabberId = a.getResourceId(R.styleable.TouchListView_grabber, -1);
이부분에서 널 포인터가 나는데 이부분을 수정해야 합니다.
해당 리스트 뷰에서 grabber를 지정해주지 않았기 때문에 디폴트 값인 -1을 반환하였고
-1 메모리에 있는 자료를 참조하려 했으니 null 에러가 뜨는겁니다.
_grabber은
<attr name="grabber" format="reference" />
이므로 grabber의 항목은 사용하는 xml에서 정의해야 합니다.
사용할 list_view의 item 중, 드래그 할 경우 순서가 바뀔 아이템의 아이디를 넣어줍니다.
원래라면
<패키지 이름.TouchListView
android:id="@+id/wish_list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
에서 grabber의 아이디를 잡아줘야 하는데, 리스트 뷰와 리스트뷰의 내용물이 같은 xml에 존재하지 않아서 id를 주는 법을 모르겠네요.
그래서
grabberId = a.getResourceId(R.styleable.TouchListView_grabber, R.id.list_image);
의 디폴트 값을 수정합니다.
리스트 뷰의 내용물에 있는 R.id.list_image 아이디를 가진 뷰를 드래그 할 경우 순서가 바뀌도록 한 경우입니다.
그리고 아마 코드에서 insert를 새로 구현해야 할텐데
insert를 구현한 뒤에 notifyDataSetChanged()를 해주시면 됩니다.