안녕하세요.. 곧 점심시간이네요..
바쁘시겠지만 도움 부탁 드립니다. db 에 있는 값들을 리스트 뷰로 해서 200개 정도 받아서 출력하고 있습니다.
그런데 리스트뷰에서 각 출력된 값들을 클릭시에 그에 맞는 이미지를 출력하고 싶은데요.. 클릭 이벤트 구현이 어렵네요..
리스트뷰 소스입니다.
public class list extends Activity {
private ListView m_listIndex;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
initialize(this);
m_listIndex = (ListView) this.findViewById(R.id.IndexList);
m_listIndex.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
}
});
setAdaptor();
}
public static final String ROOT_DIR = "/data/data/material.data.db/";
private static final String DATABASE_NAME = "Material.db";
public static final String TABLE_NAME = "material";
private static final String COLUMN_KEY_ID = "_id";
private static final String COLUMN_NAME = "name";
public static void initialize(Context ctx) {
// check
File folder = new File(ROOT_DIR + "databases");
folder.mkdirs();
File outfile = new File(ROOT_DIR + "databases/" + DATABASE_NAME);
if (outfile.length() <= 0) {
AssetManager assetManager = ctx.getResources().getAssets();
try {
InputStream is = assetManager.open(DATABASE_NAME, AssetManager.ACCESS_BUFFER);
long filesize = is.available();
byte [] tempdata = new byte[(int)filesize];
is.read(tempdata);
is.close();
outfile.createNewFile();
FileOutputStream fo = new FileOutputStream(outfile);
fo.write(tempdata);
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private SQLiteDatabase mDatabase;
private void setAdaptor() {
if (mDatabase == null) {
mDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);
}
Cursor cursor = null;
final CursorAdapter adaptor;
String[] columns = new String[] {COLUMN_KEY_ID, COLUMN_NAME};
cursor = mDatabase.query(TABLE_NAME, columns, null, null, null, null, null);
adaptor = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[] {COLUMN_NAME},
new int[] {android.R.id.text1}
);
m_listIndex.setAdapter(adaptor);
}
}
많은 도움 부탁 드리겠습니다. ㅠ




위에 Activity 상속 받지 말고 ListActivity로 처리 하시구요.
setContentView(R.layout.list); 요기 xml list.xml 에 있는 Listview 이녀석 id 값을 "android:id/list" 이걸로 부여하면 컨트롤 하기 쉬운데...
무튼 지금 있는 코드로 하자면
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
}
여기서 처리를 해줘야 하구요 (listview 누를 때마다 저 함수가 호출 됨) arg0 => adapter, arg1 => view, arg2 => position, arg3 => id
이게 실제 파라메터 변수들입니다. 여기서 position 값은 list 에서 몇 번째 위치 한 것인지 알아 내는 것이구요.
저렇게 직접적으로 database를 물려놨으니 그럼 db 객체에다가 직접 문의 하셔야 겠네요.
db.query(.......) 이런식으로 하면 cursor 라는 놈이 나옴. 이거 가지고 adapter에 연결 하는건데... 뭔가 이상함.
database 제대로 사용 하실려면 contentprovider 구현 하시는게 편할 거에요.
구글링 키워드는 ContentProvider, Cursor, ListActivity, ListView, CursorAdapter 이정도면 가볍게 구현 하겠네요.