안녕하세요.
커스텀 리스트뷰와 내부 DB(sqlite)를 이용하여 대화내용을 출력해주는
레이아웃을 구현하고 있습니다.
대화내용layout/시간타이틀layout 이 두개를 커스텀 리스트뷰에 출력하고 있는데요,
대화내용을 추가할 때마다 DB에도 추가가 됩니다. [대화메세지/시간 등]
대화내용을 롱 클릭해서 DB내에서 조회해서 삭제 한 후, 다시 갱신해서 보여주려고 하는데
pk값으로 조회해서 삭제하려고 합니다.
뷰홀더로 해당 대화내용의 pk값을 저장했다가. 롱클릭했을 때 해당 메세지의 pk값을 확인 후,
sql로 삭제하려고 하는데, 롱클릭 부분의 toast...즉, holder.date_tv.getTag().toString() 이 부분에서 에러가
발생합니다. 현재는 pk값이 아닌 날짜값만 조회하려고 하는데 널포인트익셉션이 발생합니다.;
어느 부분에서 값이 저장이 안된건지 모르겠습니다. ㅠ
onCreate에서 db데이터를 조회해서 순서대로 출력합니다.
(getview에서 대화형식[0]인지, 타이틀[1]인지 구별해서 각각 다른 레이아웃 형식으로 출력)
public View getView(int position, View convertView, ViewGroup parent)
{
//View view = null;
final ViewHolderItem holder;
//요청하는 항목에 해당하는 데이터 객체를 얻는다.
ExamData data = m_data_list.get(position);
// 해당 항목의 뷰 타입을 얻는다.
int type = getItemViewType(position);
//final ExamData data =null;
// /ExamData data;
// convertView 뷰는 어댑터가 현재 가지고 있는 해당 항목의 뷰객체이다.
// null 이 넘어오는 경우에만 새로 생성하고, 그렇지않은 경우에는 그대로 사용한다.
if (convertView == null)
{
Log.d("convertView is null","convertView is null");
holder = new ViewHolderItem();
//view = m_inflater.inflate(R.layout.list_item1, null);
switch (type)
{
case 0://대화형식
convertView = m_inflater.inflate(R.layout.list_item1, null);
if (data != null)
{
holder.user_tv = (TextView) convertView.findViewById(R.id.user_view1);
holder.msg_tv = (TextView) convertView.findViewById(R.id.message_view1);
holder.date_tv = (TextView) convertView.findViewById(R.id.date_view1);
// 이름, 메세지, 시간정보를 텍스트뷰에 설정한다.
holder.user_tv.setText(data.data0); //이름
holder.msg_tv.setText(data.data1); //메세지
holder.date_tv.setText(data.data2); //시간정보
convertView.setTag(holder);
}
break;
case 1://시간타이틀
convertView = m_inflater.inflate(R.layout.list_item3, null);
if(data!=null)
{
((TextView) convertView).setText(data.data0);
}
break;
}
}
else //convertview is not null
{
holder = (ViewHolderItem)convertView.getTag();
}
//삭제
m_list.setOnItemLongClickListener(new OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id)
{
Toast.makeText(getApplicationContext(),holder.date_tv.getTag().toString(), 1000).show();
//delete_dialog(position);
return true;
//data에 pk값도 추가해서 클릭으로 선택시, pk값을 얻어온 후 그 값으로 delete..
}
});
//not null
return convertView;
}
}
public static class ViewHolderItem
{
TextView user_tv=null;
TextView msg_tv=null;
TextView date_tv=null;
}
Examdata 부분입니다.
public static class ExamData
{
public int type = 0; // 레이어종류를 구분할 변수.
public String data0;
public String data1;
public String data2;
// byte parm_type,
public ExamData(int parm_type, String parm_data0, String parm_data1,
String parm_data2) {
type = parm_type;
data0 = parm_data0; // name
data1 = parm_data1; // msg
data2 = parm_data2; // time
}
}