출처: http://huewu.blog.me/110088703990
public void setChoiceMode (int choiceMode)
Defines the choice behavior for the List. By default, Lists do not have any choice behavior (CHOICE_MODE_NONE
). By setting the choiceMode toCHOICE_MODE_SINGLE
, the List allows up to one item to be in a chosen state. By setting the choiceMode to CHOICE_MODE_MULTIPLE
, the list allows any number of items to be chosen.
/**
* This example shows how to use choice mode on a list. This list is
* in CHOICE_MODE_SINGLE mode, which means the items behave like
* checkboxes.
*/
public class List10 extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_single_choice, GENRES));
final ListView listView = getListView();
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
private static final String[] GENRES = new String[] {
"Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
"Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
};
}
Checkable
인터페이스를 구현하고 있어야 된다는 점입니다. ListView 내부에서 'CHOICE_MODE' 기능을 구현할 때, 해당 인터페이스에서 제공하는 메서드들을 활용하고 있기 때문입니다. 참고로 안드로이드 예제에서 사용하고 있는 'simple_list_item_single_choice' Layout 은 하나의 'CheckedTextView' 로 구성된 Layout 인데, CheckedTextView 클래스는 Checkable 인터페이스를 구현하고 있습니다. public class CheckableRelativeLayout extends RelativeLayout implements Checkable{
final String NS = "http://schemas.android.com/apk/res/com.huewu.example.checkable";
final String ATTR = "checkable";
int checkableId;
Checkable checkable;
public CheckableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
checkableId = attrs.getAttributeResourceValue(NS, ATTR, 0);
}
@Override
public boolean isChecked() {
checkable = (Checkable) findViewById(checkableId);
if(checkable == null)
return false;
return checkable.isChecked();
}
@Override
public void setChecked(boolean checked) {
checkable = (Checkable) findViewById(checkableId);
if(checkable == null)
return;
checkable.setChecked(checked);
}
@Override
public void toggle() {
checkable = (Checkable) findViewById(checkableId);
if(checkable == null)
return;
checkable.toggle();
}
}//end of class
<?xml version="1.0" encoding="utf-8"?>
<com.huewu.example.checkable.CheckableRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:huewu="http://schemas.android.com/apk/res/com.huewu.example.checkable"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" huewu:checkable="@+id/radio">
<ImageView android:id="@+id/img" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
android:src="@drawable/icon" />
<RadioButton android:id="@id/radio" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_alignParentRight="true"
android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
android:layout_marginRight="5dip" android:focusable="false" android:clickable="false"/>
<TextView android:id="@android:id/text1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_toRightOf="@id/img"
android:layout_alignParentTop="true" />
<TextView android:id="@android:id/text2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_toRightOf="@id/img"
android:layout_below="@android:id/text1"
android:layout_alignParentBottom="true" android:text="This is my list item layout" />
</com.huewu.example.checkable.CheckableRelativeLayout>
//////////////////////////////////////////////////////////////////////////////////////////////
//출처 : http://cafe.naver.com/androidheaven.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=153&
CheckBox 가 들어간 ListView를 만들고 싶다면
먼저, 추가 할 구문이 있습니다.
listview. setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
CheckBox를 ListView에 넣게 되면 CheckBoxr가 focus 를 가져가기 때문에
아마 listview를 클릭해도 이벤트가 안 먹힐 겁니다.
그렇기 때문에, CheckBox 가 선언된 custom Adapter 안의 getView()메소드 안에서,
CheckBox checkbox = convertView.findViewId(R.id.cb); checkbox.setFocusable(false); |
위와 같이 선언 해주서 focus를 뺏기지 않습니다.
그런다음,
checkbox.setClickable(false) checkbox.setChecked(((ListView)parent).isItemChecked(position)); |
위와 같이 선언합니다.
왜냐하면 리스트뷰를 클릭했을 때 CheckBox가 반응 하게 하기 위함이죠.
'스마트기기개발관련 > 안드로이드 개발' 카테고리의 다른 글
안드로이드 웹을 이용한 이미지 관련 (0) | 2011.06.24 |
---|---|
안드로이드 제공 searchable 이용해서 검색창 넣기 (1) | 2011.06.20 |
안드로이드 - Text.setOnTouchListener() 예제, 터치시 텍스트 뷰의 글자색 변환하기 (0) | 2011.06.15 |
안드로이드 키보드 엔터키 바꾸기 (0) | 2011.06.08 |
안드로이드 로컬 html 불러오기 관련 (0) | 2011.06.08 |
댓글 영역