CheckedTextView のカスタマイズ、左に、(2)

前回記事に続いて、左にチェックボックスを付ける CheckedTextView のカスタマイズ です。

ListView 1行のレイアウトは、android.R.layout.simple_list_item_single_choice を参考に
カスタマイズのCheckedTextView を使用したレイアウトを用意します。

<?xml version="1.0" encoding="utf-8"?>
<uran.sample.LeftCheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/uran.sample.app"
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center_vertical"
        android:paddingLeft="10dip"
        android:paddingRight="6dip"
        app:checkMark="?android:attr/listChoiceIndicatorSingle"
        app:checked="false"
        app:drawablePadding="10dp"
        android:text="LeftCheckedTextView">

</uran.sample.LeftCheckedTextView>

xmlns:app で指定するスキーマパスの res/ の後ろは、AndroidManifest.xml で記述する package 名です。

app:checked="false" → 初期表示は、チェック無し

app:checkMark="?android:attr/listChoiceIndicatorSingle"
→ シングル選択用のチェックボックスになります。
複数選択は、listChoiceIndicatorMultiple を指定します。

app:drawablePadding="10dp" チェックボックスとテキストの隙間の長さを指定します。


Activity クラス側の記述、、、
表示対象のアイテムを、toString() を適切に実装して置きます。

public class Item {
   public int id;
   public String name;
   public Item(int id,String name){
      this.id = id;
      this.name = name;
   }
   @Override
   public String toString(){
      return name + " - " + Integer.toString(id);
   }

}

Activity グローバル変数で、、

List<Item> list;
int selectedIndex = -1;

onCreate の中で、作成したレイアウトを ArrayAdapter で指定して、、

final ListView listview = (ListView)findViewById(R.id.listview);
listview.setAdapter(new ArrayAdapter<Item>(this,R.layout.left_check_single,list));
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
   @Override
   public void onItemClick(AdapterView<?> parent,View view,int position,long id){
      selectedIndex = position;
      Toast.makeText(LeftCheckSingleListActivity.this,"clicked "+list.get(position),Toast.LENGTH_SHORT).show();
   }
});