<?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" >
<!-- hint = 입력시 없어짐(입력하기 전에 보여지는 텍스트) -->
<EditText
android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="새 해야 할 일" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false" />
</LinearLayout>
package kr.android.listview2;
//ListActivity 사용하기 ArrayList사용하여 추가 삭제기능
import java.util.ArrayList;
import android.app.ListActivity;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.os.Bundle;
public class ListViewDemo2 extends ListActivity implements OnKeyListener {
//이벤트 리스너
ArrayList<string> todoItems;
ArrayAdapter<string> aa;
EditText myEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//이벤트 소스
myEditText = (EditText) findViewById(R.id.myEditText);
//데이터 저장소 생성
todoItems = new ArrayList<string>();
//ArrayList와 ListView 데이터 바인딩
aa = new ArrayAdapter<string>(this,
android.R.layout.simple_list_item_1, todoItems);
//ArrayAdapter를 ListView에 등록
setListAdapter(aa);
//이벤트 소스와 이벤트 리스너가 구현된 객체 연결
myEditText.setOnKeyListener(this);
}
//전달된 인자
//View v : 이벤트 발생 객체
//int keyCode : 입력한 키
//KeyEvent event : KeyEvent 객체
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
//저장소에 데이터 저장(index 0에 데이터 저장)만약 기존 데이터가 있으면,
//신규 데이터는 index0에 저장 기존데이터는 다음 index에 저장
todoItems.add(0, myEditText.getText().toString());
//데이터 저장소로부터 데이터를 새롭게 읽어들여서 ListView를 갱신
aa.notifyDataSetChanged();
//빈문자열로 다시 만들어 입력을 받게끔
myEditText.setText("");
return true;
}
}
return false;
}
}
<?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/newitem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="Add" />
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="Del" />
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:choiceMode="singleChoice" />
</LinearLayout>
package kr.android.listview3;
import java.util.ArrayList;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class ListViewDemo3 extends ListActivity {
ArrayList<string> items;
ArrayAdapter<string> adapter;
ListView list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//데이터 저장소 생성 및 초기 데이터 설정
items = new ArrayList<string>();
items.add("First");
items.add("Second");
items.add("Third");
//ArrayList에 있는 데이터를 ListView에 바인딩
adapter = new ArrayAdapter<string>(this,
android.R.layout.simple_list_item_single_choice, items);
//ArrayAdapter를 ListView에 등록
setListAdapter(adapter);
//onClick에 두개를 진입하기 위해 설정 (이렇게 안하면 코드가2배)
//이벤트 소스와 이벤트를 처리해주는 객체 연결
findViewById(R.id.add).setOnClickListener(mClickListener);
findViewById(R.id.delete).setOnClickListener(mClickListener);
}
//익명내부 클래스 형태의 이벤트 처리
Button.OnClickListener mClickListener = new View.OnClickListener(){
public void onClick(View v){
EditText ed = (EditText)findViewById(R.id.newitem);
switch(v.getId()){ //이벤트가 발생한 객체의 id
case R.id.add:
String text = ed.getText().toString();
if(text.length() != 0){
items.add(0,text);
ed.setText("");
adapter.notifyDataSetChanged();
}
break;
case R.id.delete:
int id;
//현재 동작하는 ListView객체 반환
list = getListView();
id=list.getCheckedItemPosition();
//getCheckedItemPosition()으로부터 반환받은
//position이 정상적인 position인지 검증
if(id != ListView.INVALID_POSITION){
//데이터 삭제
//ArrayList 데이터 삭제
items.remove(id);
//라디오 버튼을 선택하지 않은 것으로 초기화
list.clearChoices();
//ArrayList에 변경된 데이터를 다시 읽어들여
//ListView를 갱신
adapter.notifyDataSetChanged();
}
break;
}
}
};
}