2. String 상수
res/values/strings.xml에 사용할 문자열들을 기록한다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">리스트뷰 기본</string>
<string name="button_add">추가</string>
<string name="button_ok">확인</string>
<string name="button_yes">예</string>
<string name="button_no">아니오</string>
<string name="alert_title_question">질문</string>
<string name="alert_msg_delete">"%s"를 삭제하시겠습니까?</string>
</resources>
<resources>
<string name="app_name">리스트뷰 기본</string>
<string name="button_add">추가</string>
<string name="button_ok">확인</string>
<string name="button_yes">예</string>
<string name="button_no">아니오</string>
<string name="alert_title_question">질문</string>
<string name="alert_msg_delete">"%s"를 삭제하시겠습니까?</string>
</resources>
3. layout xml
1) main.xml
Activity의 화면 구성
2) list_item.xml
ListView의 row 화면 구성
Activity의 화면 구성
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right">
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/button_add"
android:onClick="onBtnAddClick"/>
<EditText
android:id="@+id/ed_input"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/btn_add" />
</RelativeLayout>
<ListView
android:id="@+id/lv_data"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right">
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/button_add"
android:onClick="onBtnAddClick"/>
<EditText
android:id="@+id/ed_input"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/btn_add" />
</RelativeLayout>
<ListView
android:id="@+id/lv_data"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
2) list_item.xml
ListView의 row 화면 구성
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="18pt"
android:gravity="center_vertical"
/>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="18pt"
android:gravity="center_vertical"
/>
4. Activity 코드
package pe.stargatex.study2.listview;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class ListViewBasicActivity extends Activity {
private ArrayList<String> items = null;
private ArrayAdapter<String> adapter = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ListView의 데이타를 저장할 Adapter 생성
ListView lv = (ListView)findViewById(R.id.lv_data);
items = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this, R.layout.list_item, items);
lv.setAdapter(adapter);
// ListView의 이벤트 설정
lv.setOnItemClickListener( new ListViewItemClickListener() );
lv.setOnItemLongClickListener( new ListViewItemLongClickListener() );
}
/**
* (추가) 버튼이 클릭되었을 경우.
* EditText에 입력된 문자열을 ListView에 추가한다.
* @param v
*/
public void onBtnAddClick( View v )
{
EditText ed = (EditText)findViewById(R.id.ed_input);
items.add( ed.getText().toString() );
// 이 method를 호출하지 않을 경우, ListView에 추가된 문자열이 보이지 않는다.
adapter.notifyDataSetChanged();
ed.setText("");
}
/**
* ListView의 item을 클릭했을 때.
* alert로 클릭된 문자열을 보여준다.
* @author stargatex
*
*/
private class ListViewItemClickListener implements AdapterView.OnItemClickListener
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
AlertDialog.Builder alertDlg = new AlertDialog.Builder(view.getContext());
alertDlg.setPositiveButton( R.string.button_ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which ) {
dialog.dismiss(); // AlertDialog를 닫는다.
}
});
alertDlg.setMessage( items.get(position) );
alertDlg.show();
}
}
// Long click된 item의 index(position)을 기록한다.
int selectedPos = -1;
/**
* ListView의 item을 길게 클릭했을 경우.
* 클릭된 item을 삭제한다.
* @author stargatex
*
*/
private class ListViewItemLongClickListener implements AdapterView.OnItemLongClickListener
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
{
selectedPos = position;
AlertDialog.Builder alertDlg = new AlertDialog.Builder(view.getContext());
alertDlg.setTitle(R.string.alert_title_question);
// '예' 버튼이 클릭되면
alertDlg.setPositiveButton( R.string.button_yes, new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which )
{
items.remove(selectedPos);
// 아래 method를 호출하지 않을 경우, 삭제된 item이 화면에 계속 보여진다.
adapter.notifyDataSetChanged();
dialog.dismiss(); // AlertDialog를 닫는다.
}
});
// '아니오' 버튼이 클릭되면
alertDlg.setNegativeButton( R.string.button_no, new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which ) {
dialog.dismiss(); // AlertDialog를 닫는다.
}
});
alertDlg.setMessage( String.format( getString(R.string.alert_msg_delete),
items.get(position)) );
return false;
}
}
}
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class ListViewBasicActivity extends Activity {
private ArrayList<String> items = null;
private ArrayAdapter<String> adapter = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ListView의 데이타를 저장할 Adapter 생성
ListView lv = (ListView)findViewById(R.id.lv_data);
items = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this, R.layout.list_item, items);
lv.setAdapter(adapter);
// ListView의 이벤트 설정
lv.setOnItemClickListener( new ListViewItemClickListener() );
lv.setOnItemLongClickListener( new ListViewItemLongClickListener() );
}
/**
* (추가) 버튼이 클릭되었을 경우.
* EditText에 입력된 문자열을 ListView에 추가한다.
* @param v
*/
public void onBtnAddClick( View v )
{
EditText ed = (EditText)findViewById(R.id.ed_input);
items.add( ed.getText().toString() );
// 이 method를 호출하지 않을 경우, ListView에 추가된 문자열이 보이지 않는다.
adapter.notifyDataSetChanged();
ed.setText("");
}
/**
* ListView의 item을 클릭했을 때.
* alert로 클릭된 문자열을 보여준다.
* @author stargatex
*
*/
private class ListViewItemClickListener implements AdapterView.OnItemClickListener
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
AlertDialog.Builder alertDlg = new AlertDialog.Builder(view.getContext());
alertDlg.setPositiveButton( R.string.button_ok, new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which ) {
dialog.dismiss(); // AlertDialog를 닫는다.
}
});
alertDlg.setMessage( items.get(position) );
alertDlg.show();
}
}
// Long click된 item의 index(position)을 기록한다.
int selectedPos = -1;
/**
* ListView의 item을 길게 클릭했을 경우.
* 클릭된 item을 삭제한다.
* @author stargatex
*
*/
private class ListViewItemLongClickListener implements AdapterView.OnItemLongClickListener
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
{
selectedPos = position;
AlertDialog.Builder alertDlg = new AlertDialog.Builder(view.getContext());
alertDlg.setTitle(R.string.alert_title_question);
// '예' 버튼이 클릭되면
alertDlg.setPositiveButton( R.string.button_yes, new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which )
{
items.remove(selectedPos);
// 아래 method를 호출하지 않을 경우, 삭제된 item이 화면에 계속 보여진다.
adapter.notifyDataSetChanged();
dialog.dismiss(); // AlertDialog를 닫는다.
}
});
// '아니오' 버튼이 클릭되면
alertDlg.setNegativeButton( R.string.button_no, new DialogInterface.OnClickListener()
{
@Override
public void onClick( DialogInterface dialog, int which ) {
dialog.dismiss(); // AlertDialog를 닫는다.
}
});
alertDlg.setMessage( String.format( getString(R.string.alert_msg_delete),
items.get(position)) );
alertDlg.show();
return false;
}
}
}
아래는 첨부 파일이다.
출처 - http://cafe.naver.com/swnara/341