<Android> ListViewのList行の背景色などを変える


久々に投稿

色々、忙しいことがあり、あまり更新できていなかったので、久しぶりに更新。今回は現在製作中のアプリにおいて、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)