CheckBox in ListView
CheckBox in ListView
Listviewはandroidでよく使われるコンポーネントですが、特殊な場合、システムが提供するlist view itemが足りず、ニーズを満たすことができない場合は、listViewをカスタマイズする必要があります.
listviewのitemにCheckBoxとTextView(like gmail app list item)が2つ必要な場合は、list item layoutとカスタムadapterをカスタマイズする必要があります.
簡単なリストitemがあります(例では1行しか表示されません):
リストビューのitemにButtonやCheckBoxなどの空間があると、リストビューのItemSelectedメソッドが無効になります.
この問題を解決するには、ButtonまたはCheckBoxに設定を追加する必要があります.
上記の例では、カスタムadapterでCheckBoxのfocus Changeイベントをリスニングするには、OnClickListenerイベントで実現する必要があるCheckBoxがあります.
ListAdapter. BaseAdaperまたは彼女のサブクラスを継承すればいいです.
Listviewはandroidでよく使われるコンポーネントですが、特殊な場合、システムが提供するlist view itemが足りず、ニーズを満たすことができない場合は、listViewをカスタマイズする必要があります.
listviewのitemにCheckBoxとTextView(like gmail app list item)が2つ必要な場合は、list item layoutとカスタムadapterをカスタマイズする必要があります.
簡単なリストitemがあります(例では1行しか表示されません):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_vertical"
android:padding="5dp" >
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:focusable="false"
android:text="" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="74dp"
android:layout_toRightOf="@+id/checkBox1"
android:text="" />
</RelativeLayout>
リストビューのitemにButtonやCheckBoxなどの空間があると、リストビューのItemSelectedメソッドが無効になります.
この問題を解決するには、ButtonまたはCheckBoxに設定を追加する必要があります.
android:focusable="false"
このようなイベントは、List viewのitemに伝達される.上記の例では、カスタムadapterでCheckBoxのfocus Changeイベントをリスニングするには、OnClickListenerイベントで実現する必要があるCheckBoxがあります.
private ListAdapter adapter = new ListAdapter(){
@Override
public void registerDataSetObserver(DataSetObserver observer) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater)ListViewTest.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
final View view = inflater.inflate(R.layout.layout_listview_item_select_multi_1, null) ;
TextView tv = (TextView)view.findViewById(R.id.textView1) ;
tv.setText(data.get(position)) ;
CheckBox cb = (CheckBox)view.findViewById(R.id.checkBox1) ;
cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox cb = (CheckBox)v ;
if(cb.isChecked()){
view.setBackgroundResource(R.drawable.list_selector2) ;
}else{
view.setBackgroundResource(R.drawable.list_selector3) ;
}
}
}) ;
return view;
}
@Override
public int getItemViewType(int position) {
return 0;
}
@Override
public int getViewTypeCount() {
return 1;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return true;
}
} ;
もちろんAdapterを書き換え、実現する必要はありませんListAdapter. BaseAdaperまたは彼女のサブクラスを継承すればいいです.