마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ListView에서 Item 클릭시 원하는 DB출력 하는 방법..

0 추천

회원님들 덕분에 DB를 ListView로 뿌리는 방법까지는 해결을 했습니다..

이제 ListView의 Item을 클릭하면 그 Item에 맞는 내용을 DB에서 가져와서 출력하고 싶은데요..

(예를 들면 1번 박지성/ 2번 박주영/3번 호날두 이런식으로 ListView에 출력되면 클릭시

각 선수의 포지션이 나오도록.. ; AlertDialog 또는 다른 Activity로 넘어가서 TextView로 출력하려 합니다..)

어떻게 해야할지 막막합니다ㅠㅠ 예제를 열심히 찾아보았는데

setOnItemClickListener 를 사용한다는 것은 알겠는데.. 

 

 

listColon.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View v, int position,
         long id) {
         cursor=db.rawQuery("Select * from CanGuide where CanKnd='대장암'",null);
         startManagingCursor(cursor);
         Cursor c = (Cursor)AdapterColon.getItem(position);
         String note = c.getString(5); 
         AlertDialog.Builder bld=new AlertDialog.Builder(CancerAdvice.this);
         bld.setTitle(c.getString(3));
         bld.setMessage(note);
         bld.setIcon(R.drawable.ic_menu_edit);
         bld.setPositiveButton("Close", new DialogInterface.OnClickListener() {
 
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
 
}
});
         bld.show();
         //Toast.makeText(getApplicationContext(), note, Toast.LENGTH_LONG).show();
          }
         });
       
 

이런식으로 구성하던데 제 코딩은 SimpleCursorAdapter가 아니라 ArrayAdapter 라 그런지 

저 방법을 그대로 사용하면 계속 오류가 나네요..

고수님들 부탁드립니다ㅠㅠ..

코딩은 아래주소에 올려놓았습니다.. 감사합니다..

http://blog.naver.com/snackcar/90190623709

 

스넥카 (180 포인트) 님이 2014년 2월 19일 질문

2개의 답변

0 추천
position에 해당하는 값을 가져와야죠. 객체 모델링해서 잘 해보세요.
익명사용자 님이 2014년 2월 19일 답변
0 추천

소스를 봤는데 구조적으로 좀 문제가 많아 보이네요.

매번 DB를 Open하고 Close 하는 것도 비효율 적인거 같고요.

그냥 앱 시작시 Open하고 종료시 Close하도록 해서 DBAdapter를 사용하시는게 좋을 듯 하고요.

 

또, 앱 시작시 DB에 데이터를 Insert하고 나서 리스트 출력을 위해 조회하고 바로

dbAdapter.deleteNote(); 를 호출하여 테이블 데이터를 지우는데 왜 이렇게 하신건지;

이러면 1번버튼눌러 한번 조회하고 나면 데이터가 다 지워져서 다음번에 조회 할 수 없습니다.

그리고, DB를 서버가 아니라 로컬로 가지고 계실거면 데이터가 필요할 때마다 DB에 조회하는것이

아니라 각 컬럼에 매칭되는 맴버변수를 가지는 Model 클래스를 리스트형으로 가지고 메모리에서

사용(출력, 조회) 하시는게 좋을 듯 하네요.

 

그리고 클릭시 오류 부분은 

Cursor c = dbAdapter.fetchAllNotes();
result.moveToFirst();
 
이렇게 되있는데 조회한 Cursor를 c로 받아오고 result.moveToFirst를 호출해서 그럽니다.
이시점에 이전 버튼1 클릭 조회시 이미 result.close() 상태이기 때문에 에러가 발생합니다.
c.moveToFirst();로 해야 겠지만 이것도 데이터가 없어 row count가 0인 상태니 에러가 발생합니다. ^^;
 
프로그램은 결과만 나온다고 다가 아닙니다. 간단한 프로그램이라도
요구사항정의나 기능정의를 하시고 구조 설계에 신경을 쓰시는 버릇을 들이시면
현업에 나와서 야근을 많이 줄일수 있을 겁니다.
그리고 아키텍쳐등이 변할수 있는 부분과 변동이 없는 부분을 나놔서 변화가 많은 부분은
인터페이스로 구현하신다던가 자주 반복호출되는 코드는 따로 빼든가 하면 추후 수정할 때도 할 일이 많이 줄어들겁니다.
우리나라에 좋은 소프트웨어 개발자들이 많아졌으면 하는 바람에서 사설이 많았네요.
코딩인헬 (12,150 포인트) 님이 2014년 2월 19일 답변
코딩인헬님이 2014년 2월 19일 수정
우선 답변을 주신거 정말 감사드립니다ㅠㅠ
근데 제가 dbAdapter.deleteNote(); 를 호출한 이유가
1번 버튼을 누르면 계속 리스트뷰가 추가되더라구요ㅠㅠ
1 2 3 4 5 5 6 7 9 10 1 2 3 4 5 6 7 8 9 10 .. 이런식으로 말이죠..
그래서 아예 클릭할때 마다 데이터들을 전부 지워버리려고 한건데
잘못된것인가요?ㅜㅜ 클리어 하는법을 모르겠네요..
그 클릭시 오류 부분은 제가 어떻게 해야할지 아예 감이 안잡히네요..
사실 JAVA, DB 공부 전부 제대로 안된 상태로 어플 하나 만들어보면서
배우려다 보니 다 엉망인거 같아요.. 어떤거부터 공부해야할지
길을 좀 알려주실 수 있을까요..감사합니다
...