[Android] AdapterView - 2 Android 2011. 12. 19. 15:25
리스트 뷰에서는 항목들을 각각이 편집이 가능하다.

다음은 리스트 뷰를 입력에 따라 추가 삭제 하는 내용이다.

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
    >
        <EditText
            android:id="@+id/text"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="4"    
        />
        <Button
            android:id="@+id/add"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="3"    
         android:text="add"
        />
        <Button
            android:id="@+id/del"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="3"
         android:text="delete"    
        />
    </LinearLayout>
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</LinearLayout>

java 코드

ArrayList<String> arr;
 ArrayAdapter<String> adapter;
 ListView list ;
    /** Called when the activity is first created. */
 @Override   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        arr = new ArrayList<String>();
        arr.add("first");
        arr.add("second");
        arr.add("third");
       
        adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,arr);       
       
        list = (ListView)findViewById(R.id.list);
        list.setAdapter(adapter);       
        list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        list.setDivider(new ColorDrawable(0xffffff00));
        list.setDividerHeight(2);
       
        list.setOnItemClickListener(i_listener);
        findViewById(R.id.add).setOnClickListener(b_listener);
        findViewById(R.id.del).setOnClickListener(b_listener);
    }
 
 AdapterView.OnItemClickListener i_listener = new AdapterView.OnItemClickListener() {
  public void onItemClick(AdapterView parent, View view, int position, long id){
   Toast.makeText(ImageViewActivity.this, "Select : " + arr.get(position), Toast.LENGTH_SHORT);
  } 
 };
 
 Button.OnClickListener b_listener = new View.OnClickListener() {
  
  @Override
  public void onClick(View v) {
   EditText ed = (EditText)findViewById(R.id.text);
   switch(v.getId())
   {
    case R.id.add:
     String text = ed.getText().toString();
     if(text.length()!=0)
     {
      arr.add(text);
      ed.setText("");
      adapter.notifyDataSetChanged();
     }
     break;
    case R.id.del:
     int id = list.getCheckedItemPosition();
     if(id!=ListView.INVALID_POSITION)
     {
      arr.remove(id);
      list.clearChoices();
      adapter.notifyDataSetChanged();
     }
     break;
   }
  }
 };

여기에서 지금 SINGLE_CHOICE 로 된 것을 MULTIPLE_CHOICE 로 바꿔주면 한거번에 다수를 지울 수도 있다.

[Android] AdapterView - 1 Android 2011. 12. 19. 15:22
어댑터 뷰는 리스트 뷰, 그리드 뷰, 스피너, 갤러리 등 모은 것을 묶어서 어댑터 뷰라고 통칭한다.

이들은 여러개의 차일드 뷰를 가질 수도 있으며 터치나 키패드로 항목을 선택 할 수도 있다.

먼저 리스트 뷰를 보면 xml 파일을 다음과 같이 작성한다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</LinearLayout>
그리고 자바 파일은 다음과 같다.

/** Called when the activity is first created. */
 @Override   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayList<String> arr = new ArrayList<String>();
        arr.add("1");
        arr.add("2");
        arr.add("3");
        arr.add("4");
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr);
        ListView list = (ListView)findViewById(R.id.list);
        list.setAdapter(adapter);
    }
행여 혹시나 ArrayList가 어떤 것을 import 해야할지 모르는 사람들을 위해 한마디. java.util 을 import 하면 된다.

여기에서 보면 먼저 데이터를 형성하고 그 다음 어댑터를 준비, 다음으로 연결 했다. 어댑터의 속성은 다음과 같다.

첫번째 인자는 현재 액티비티. 그 다음은 리소스 아이디, 마지막으로 생성된 데이터다. 마지막 인자는 배열 형태로도 넣을 수 있다.

리소스 아이디를 살펴보면 다음과 같다.

 리소스 아이디 설명 
 simple_list_item_1 하나의 텍스트 뷰
 simple_list_item_2 두개의 텍스트 뷰
 simple_list_item_check 오른쪽에 체크 표시
 simple_list_item_single_choice 오른쪽에 라디오 버튼 표시
 simple_list_item_multiple_choice 오른쪽에 체크 버튼 표시

하지만 이런 형식으로 데이터를 입력 하는 것보다 리소스에 정의 해서 쓰는 것이 좋다.

리소스 파일을 생성해서 10개의 데이터를 넣어보자.

arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name ="array">
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
        <item>7</item>
        <item>8</item>
        <item>9</item>
        <item>10</item>
    </string-array>
</resources>

java 파일에서는 어댑터를 다음과 같이 써 주면 된다.

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.array,android.R.layout.simple_list_item_1);

리스트 뷰에는 다음과 같은 속성들이 존재한다.

 속성  인자   설명 
 none  CHOICE_MODE_NONE  항목 선택 못함
 singleChoice  CHOICE_MODE_SINGLE  하나의 항목 선택
 multipleChoice  CHOICE_MODE__MULTIPLE  복수의 항목 선택

java 코드에서 다음과 같은 코드를 추가하고 실행해보면 변화를 알 수가 있을 것이다.

list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
list.setDivider(new ColorDrawable(0xffffff00));
list.setDividerHeight(2);