2013年4月15日月曜日

SimpleAdapter : レコード毎に色を変えて表示する

SimpleAdapter : レコード毎に色を変えて表示する

文字列だけで構成されるレコードを一覧にして表示させた場合、レコード間の区切りが見分けにくくなります。
その対処方法として、 レコード毎に色を変えて表示するとか、レコード間の幅を大きくするという方法があります。
javaのコードの概要は下記のとおりです。概要を示したものであるため、このママでは動作しません(見れば分かる)
色分けのフラグをレコード毎に設定し、そのフラグに基づいて背景色を変更すること、そして、背景色の設定にはアルファ値を適当な値で設定することがポイントです。アルファ値を0xffに設定した場合、利用者がそのレコードを選択しても「選択したことを示す背景色」が表示されません。

    ArrayList<Map<String, Object>> al;//List表示用データ
        al = new ArrayList<Map<String, Object>>();
        
            b = cs.moveToLast();
            int i = 0;
            while(b==true){
                String s;
                Map<String, Object> m;
                m = new HashMap<String, Object>();
                s = cs.getString(cs.getColumnIndex("Keyword"));
                m.put("Keyword", s);
                m.put("Background", i%2);//ゼロか1を代入する
                al.add(m);
                i++;
                b = cs.moveToPrevious();
            }
        }
        cs.close();
        
        String sFrom[] = {"Keyword", "Background"};
        int iTo[] = new int[]{ R.id.Keyword_Text, R.id.Layout_Keyword_Background };
        
        SimpleAdapter sa;
        SimpleAdapter.ViewBinder savb;
        savb = new SimpleAdapter.ViewBinder(){
            @Override
            public boolean setViewValue(View v, Object data, String s){
                if(v.getId()==R.id.Layout_Keyword_Background){
                    int i = (Integer)data;
                    if(i==1) v.setBackgroundColor(0x60ffdddd);
                    else v.setBackgroundColor(0x00ffffff);
                    return true;
                }
                return false;
            }
        };
        
        sa = new SimpleAdapter(mainActivity, al, R.layout.list_keyword, sFrom, iTo);
        sa.setViewBinder(savb);
        ListView lv;
        lv = (ListView)mainActivity.findViewById(R.id.ListKeyword);
        lv.setOnItemClickListener(this);
        lv.setAdapter(sa);
        lv.setDividerHeight(10);

list_keyword.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Layout_Keyword_Background"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    >
    
    <TextView
        android:id="@+id/Keyword_Text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textIsSelectable="false"
        >
    </TextView>
</LinearLayout>

面白い動画を見つけました
メ~テレ ぬいぐるみのラパン

0 件のコメント:

コメントを投稿