前回記事に続いて、左にチェックボックスを付ける 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();
}
});