원하는 꼴은 리스트뷰에 각 리스트마다 해당 리스트의 이미지, 텍스트를 출력하는 것입니다.
(리스트마다 다른 이미지, 다른 텍스트 출력)
현재 sqlite에 데이터 저장 후 리스트뷰액티비티인 ListActivity에서 sqlite 값을 배열에 저장,
배열 값을 adapter로 보내어 리스트뷰에 이미지와 텍스트 값을 출력하려고 하는데요.
sqlite 값을 배열로 저장할 때 배열이 문자열 배열이어서 이미지 경로를 int로 저장하지 못하네요.
adapter로 출력할 때 이미지경로가 int로 되어 있어야 이미지를 찾아서 출력할 수 있는데 해결방법 아시는 분
답변 좀 부탁드립니다. !
ListActivity.java
//데이터베이스 및 테이블 open
MainActivity_SQLiteHandler handler = MainActivity_SQLiteHandler.open(getApplicationContext());
//테이블 선택
Cursor c = handler.select();
c.moveToLast(); //전체 테이블의 데이터를 세기 위해 커서 c를 테이블의 맨 끝으로 이동
int rLength = c.getCount(); //현재 row 번호(=전체 row 개수)
int cLength = c.getColumnCount(); //column 개수
c.moveToFirst(); //전체 테이블 개수를 다 센 후 배열에 데이터를 삽입하기 위해 테이블의 맨 처음으로 이동
String[][] array = new String[rLength][cLength]; //row, column 2차원 배열 생성
for(int i=0; i<rLength; i++) { //행 길이만큼 반복
for(int j=0; j<cLength; j++) { //열 길이만큼 반복
array[i][j] = c.getString(j); //반복문 j로 인해 한 행의 모든 column을 배열에 저장
}
c.moveToNext(); //다음 행으로 이동
}
listView = (ListView)findViewById(R.id.listView1);
final ArrayList<ListActivity_CustomDTO> list = new ArrayList<ListActivity_CustomDTO>();
//배열 array의 행 크기만큼 반복하여 데이터 출력
c.moveToFirst();
for(int i=0; i < array.length; i++) {
list.add(new ListActivity_CustomDTO(R.drawable.canada, array[i][4], array[i][1], array[i][8], array[i][7]));
c.moveToNext();
}
//데이터베이스 및 테이블 close. 데이터베이스는 데이터베이스와 동일한 배열 array를 만들 때와 조건검색 이후 배열 list를 만들 때 사용
handler.close();
//데이터를 어뎁터에 세팅
ListActivity_CustomAdapter adapter = new ListActivity_CustomAdapter(
getApplicationContext(),
R.layout.activity_list_row,
list);
//리스트 뷰에 어뎁터 세팅
listView.setAdapter(adapter);
ListActivity_CustomAdapter.java (어뎁터)
package com.example.zlasearchtest1;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ListActivity_CustomAdapter extends BaseAdapter {
Context ctx;
int layout;
ArrayList<ListActivity_CustomDTO> list;
LayoutInflater inf;
public ListActivity_CustomAdapter(Context ctx, int layout, ArrayList<ListActivity_CustomDTO> list) {
this.ctx = ctx;
this.layout = layout;
this.list = list;
inf = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
//ListView에서 보여줄 데이터의 개수 지정
@Override
public int getCount() {
return list.size();
}
//ListView에서 보여줄 객체 지정. getCount()값에 의해서 position 값이 동적으로 변경
//ex. getCount() 값이 3이면 position 값은 0, 1, 2로 설정되어 getItem 메소드가 3번 수행됨
@Override
public Object getItem(int position) {
return list.get(position);
}
//getItem(position) 메소드가 리턴한 객체의 고유 식별값
//일반적으로 position 값도 고유값이기 때문에 position으로 지정
@Override
public long getItemId(int position) {
return position;
}
//실제 행(row)을 보여주는 뷰를 생성하는 메소드
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//inflate 메소드를 사용하여 list_row.xml을 View 객체로 변경
if(convertView == null) {
convertView = inf.inflate(layout, null);
}
//converView 변수를 이용해서 list_row.xml에 지정한 위젯 참조
ImageView imgIcon = (ImageView)convertView.findViewById(R.id.imgIcon);
TextView txtBicycle = (TextView)convertView.findViewById(R.id.txtBicycle);
TextView txtBrand = (TextView)convertView.findViewById(R.id.txtBrand);
TextView txtFrame = (TextView)convertView.findViewById(R.id.txtFrame);
TextView txtPrice = (TextView)convertView.findViewById(R.id.txtPrice);
ListActivity_CustomDTO dto = list.get(position);
imgIcon.setImageResource(dto.getImgIcon());
txtBicycle.setText(dto.getBicycle());
txtBrand.setText(dto.getBrand());
txtFrame.setText(dto.getFrame());
txtPrice.setText(dto.getPrice());
return convertView;
}
}