2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-07-25

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

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?