안드로이드 개발 질문/답변
(글 수 45,052)
그 데이터로 listview를 구현하려고 합니다.
listview에서 각 행별로 다른 Imageview를 쓸려고 아래와 같이 구현하였습니다만
string 선언부분에서 자꾸 문제가 되네요
string을 cursor로 그 크기만큼 선언해서 이용하여야 그만큼의 Listview만 떠서
string을 전역으로 선언해주려니 오류가 생기네요
1. 여기서 string을 전역으로 선언하려면 어떻게 해야 되나요
2. 아니면 아래와같은 방법이외에 커서를 이용하여 행별로 다른 Imageview를 사용할 수 있도록 하는 방법이 있나요?
답변해주시면 감사하겠습니다.
public class ExerciseTraker extends ListActivity{public SQLiteDatabase _DB = null;
public String _Result[];
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.row);
setListAdapter(new IconicAdapter());
_DB = openOrCreateDatabase("exer.db", MODE_PRIVATE, null);int a = 0;
Cursor _Cursor = _DB.rawQuery("Select name from exercise", null); if(_Cursor.moveToFirst()){a = 1;
do{a++;
}while(_Cursor.moveToNext());
}
_Result = new String[a];
if(_Cursor.moveToFirst()){a = 0;
do{_Result[a] = _Cursor.getString(0);
a++;
}while(_Cursor.moveToNext());
}
}
public void onListItemClick(ListView parent, View v, int position, long id){}
class IconicAdapter extends ArrayAdapter {//int a = 0;
IconicAdapter() {super(ExerciseTraker.this, R.layout.row1, _Result);
}
public View getView(int position, View convertView,
ViewGroup parent) {LayoutInflater inflater=getLayoutInflater();
View row=inflater.inflate(R.layout.row1, parent, false);
TextView label=(TextView)row.findViewById(R.id.labels);
label.setText(_Result[position]);
ImageView icon=(ImageView)row.findViewById(R.id.icons);
icon.setImageResource(R.drawable.icon);
if (_Result[position].length()>4) {icon.setImageResource(R.drawable.icon);
}
else {icon.setImageResource(R.drawable.ok);
}
return(row);
}
}
}




String 배열의 크기를 커서만큼 주실땐 new String [cursor.getCount()] 하심 되고요~
SimpleAdapter 로 구현하는 방법이 있습니당.. SimpleAdapter adapter =
new SimpleAdapter(list, R.layout.customview , new String[]{"image","text"} , new int[] { R.id.imageView, R.id.textView} );
첫번째 인자는 ArrayList 변수, 두번째는 리스트뷰에 들어갈 이미지뷰와 텍스트뷰가 있는 레이아웃,
세번쨰는 해쉬맵의 키값, 네번째는 이미지뷰와 텍스트뷰의 주소 // 아!! 첫번쨰 인자에는 context 가 들어가야 대는군요..;;
ArrayList를 HashMap Type으로 선언해서 new ArrayList<HashMap<String, Object> >();
while(cursor.moveToNext() ) {
HashMap<String, Object> item = new HashMap<String, Object>
item.put("ImageView", cursor.getString(0) );
item.put("text", cursor.getString(1) );
list.add(item)
} 이런 식으로... .. 한다음
listView.setAdapter(adapter ) 하시면
0번째 컬럼에 저장된 값이 path라면 (ex : "/sdcard/DCIM/camera/aaa.jpg") setImageURL 을 지가 알아서 실행합니다. 커스텀 어뎁터를 사용하지 않으셔도 된단 얘기죠 ㅎ