#久々に投稿
色々、忙しいことがあり、あまり更新できていなかったので、久しぶりに更新。今回は現在製作中のアプリにおいて、ListViewの行の色を変えることをしたかったので、それについてのメモを残す。
##AdapterにDBから取得したデータを格納
色々内容は割愛しているけど、趣旨としては、
「DBからデータ取得してList表示を準備する際に、現在選択中のデータの行を分かりやすいように色をつけてあげる」という感じ。
sample.java
list = findViewById(R.id.splist_array);
SampleList = new ArrayList<HashMap<String,String>>();
int i = 0;
flg_pos = -1;
//list
String NAME,ID,KGN,FLG;
//DB
helper = new DBHelper(getApplicationContext());
HashMap<String,String> bList = new HashMap<String,String>();
try{
db = helper.getWritableDatabase();
//件数読み込み
RecordCount = DatabaseUtils.queryNumEntries(db,TABLE);
if(RecordCount == 0){
flg = false;
}else{
//読み込み
c = db.rawQuery(SAMPLE_SQL,null);
while(c.moveToNext()){
NAME = c.getString(c.getColumnIndex(COL_NAME));
ID = String.valueOf(c.getInt(c.getColumnIndex(COL_ID)));
KGN = c.getString(c.getColumnIndex(COL_KGN));
FLG = c.getString(c.getColumnIndex(COL_FLG));
//ここで選択中かどうか判断して、Positionを持たせておく。
if(FLG.equals("t")){
flg_pos = i;
}
bList = new HashMap<String,String>();
bList.put(COL_ID,ID);
bList.put(COL_NAME,NAME);
bList.put(COL_KGN,KGN);
SampleList.add(bList);
i++;
}
}
}catch(SQLiteException e){
e.printStackTrace();
}
##本題
上記の取得が終わったら、いよいよAdapterにセット。
sample.java
if(SampleList != null){
//Adapterをセットする際にgetView()を呼び出せるようにオーバーライドしておく。
//getView(--)は、セットされている行分繰り返し呼び出されるので、そこを利用する。(position = 0から)
adapter = new SimpleAdapter(MainActivity.this,SampleList,
R.layout.list_row,FROM,TO){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position,convertView, parent);
//ここで色をつけたい行を判断
//flg_posは、色をつけたい行
if(flg_pos == position){
//viewのパーツに色をつける。
view.setBackgroundColor(Color.parseColor("#4169e1"));
listText1 = view.findViewById(R.id.btext1); //id
listText2 = view.findViewById(R.id.btext2); //name
listText3 = view.findViewById(R.id.btext3); //kgn
listText1.setTextColor(Color.WHITE);
listText2.setTextColor(Color.WHITE);
listText3.setTextColor(Color.WHITE);
}
return view;
}
};
list.setAdapter(adapter);
}else if(flg == false){
//Listに物がない場合、何か表示させたいよね。
}else{
Log.e("ListError","Missing List...");
Toast.makeText(this,"ListReadingError...",Toast.LENGTH_SHORT);
}
簡単にできた。割と。
###終わりに
色々ググってみたが、どれもメソッドを作ったりなどの記事が多くて、これが一番楽な方法でスムーズに実装できた。
まあ、他にカスタマイズしたいのなら、もう少し出来るような気がしなくもない。
完成図などがなかったり、List_rowとかの内容が無いのは、申し訳ない。時間があまり作れないので、ちょこちょこ更新に来ます。
###参考サイト
こちらの方が分かりやすいかも。八角研究所さん。ありがとうございました。助かりました。
(http://www.hakkaku.net/hakkaker_blog/20090831-590)