현재 배열 값을 만들어서 리스트뷰에 뿌려주는 것을 만들 수 있고 따로 sqlite로 만들 수는 있는데
sqilte값을 불러와서 listView에 뿌려주는 방법을 잘 모르겠어서요.
생각해보면 배열 값 대신 sqlite값을 넣어서 adapter에 해당값 적용시켜주면 sqlite값을 listView에 뿌려줄 수 있을 것 같은데
맞는 방법인지, 맞으면 어떻게 하는지 고수님들 답변 좀 부탁드려요 :)
아래는 배열 값으로 만든 리스트 뷰 및 sqlite 코드입니다.
배열 값으로 만든 리스트뷰
MainActivity.java
package com.example.zlalistviewcustomizing;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class MainActivity extends Activity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<MyCustomDTO> list = new ArrayList<MyCustomDTO>();
list.add(new MyCustomDTO(R.drawable.canada, "canada", "canada good"));
list.add(new MyCustomDTO(R.drawable.france, "france", "france good"));
list.add(new MyCustomDTO(R.drawable.korea, "korea", "korea very good"));
list.add(new MyCustomDTO(R.drawable.mexico, "mexico", "mexico good"));
list.add(new MyCustomDTO(R.drawable.poland, "poland", "poland good"));
listView = (ListView)findViewById(R.id.listView1);
MyCustomAdapter adapter = new MyCustomAdapter(
getApplicationContext(),
R.layout.list_row,
list);
listView.setAdapter(adapter);
}
}
MyCustomAdapter.java
package com.example.zlalistviewcustomizing;
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 MyCustomAdapter extends BaseAdapter {
Context ctx;
int layout;
ArrayList<MyCustomDTO> list;
LayoutInflater inf;
public MyCustomAdapter(Context ctx, int layout, ArrayList<MyCustomDTO> 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 txtTitle = (TextView)convertView.findViewById(R.id.txtTitle);
TextView txtContent = (TextView)convertView.findViewById(R.id.txtContent);
MyCustomDTO dto = list.get(position);
imgIcon.setImageResource(dto.getImgIcon());
txtTitle.setText(dto.getTitle());
txtContent.setText(dto.getContent());
return convertView;
}
}
sqlite 코드(위와 다른 파일)
MainActivity.java
package com.example.zla;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends Activity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.listView1);
//1. 데이터베이스 open
MySQLiteHandler handler = MySQLiteHandler.open(getApplicationContext());
//2. data insert
handler.insert("홍길동", 20, "서울");
handler.insert("이순신", 45, "전라");
//3. data update
handler.update("홍길동", 10);
//4. data delete
handler.delete("이순신");
//5. data select
Cursor c = handler.select();
//Cursor 객체 관리
//startManagingCursor(c);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
getApplicationContext(),
android.R.layout.simple_list_item_2,
c,
new String[]{"name", "address"},
new int[]{android.R.id.text1,
android.R.id.text2},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
listView.setAdapter(adapter);
//6. 데이터베이스 close
handler.close();
}
}