안드로이드 스튜디오 ListView, Intent 사용하기
안드로이드 스튜디오 ListView, Intent 사용하기
ListView는 안드로이드에서 지원하는 위젯 중 하나이고 세로로 스크롤되는 목록에 항목을 표시해주는 역할을 합니다.
ListView에 나타나는 아이템들은 ArrayAdapter를 통해서 추가할 수 있습니다.
간단한 데이터를 다룰때는 ArrayAdapter 클래스를 그대로 사용하기도 하지만 사용자가 원하는 형태로 효과를 주고 싶으면
ArrayAdapter클래스를 상속 받아서 사용해야합니다.
ListView를 사용하기 위해서 해당 activity의 res/layout파일에 ListView를 추가해줍니다.
그리고 activity파일로 돌아가서 ListView를 객체화 시킵니다.
ListView에 아이템을 추가하기 위해선 Adapter를 사용해야 합니다.
즉, ListView는 Adapter를 통해 데이터를 보여주는 형식의 뷰입니다.
ListView는 .setAdapter()를 사용해서 Adapter를 설정해줄 수 있습니다.
아래에서 ArrayAdapter의 생성자 호출에 사용된 인자는 다음과 같습니다.
- this - context (일반적으로 Adapter를 포함하는 Activity의 instance)
- android.R.layout.simple_list_item_1 - 어떤 resource를 넣느냐에 따라서 ListView를 구성하는 item의 text 형태나 모양 이 바뀌는데 안드로이드에서 지원하는 것을 사용
- data - Adapter에 적용할 data
ArrayList<String> data = new ArrayList<String>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data);
Listview.setAdapter(adapter);
ListView의 아이템 클릭 이벤트는 .setOnItemClickListenr를 이용해서 설정할 수 있습니다.
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
});
그리고 ListView 아이템이 변경될 때 화면에 반영되기 위해서 adapter의 .notifyDataSetChanged()를 사용해야합니다.
adapter.notifyDataSetChanged();
안드로이드 어플리케이션을 구성하는 네 가지 요소에는
- Activity - 화면을 구성하는 기본적인 컴포넌트
- Service - 화면 없이 백그라운드에서 동작하는 컴포넌트
- BroadCast Receiver - 문자메세지, 배터리 방전 등의 방송을 받는 수신자
- Content Provider - 응용 앱 사이에 데이터를 공유하기 위한 컴포넌트
가 있습니다.
Intent는 어플리케이션 구성 요소 간에 작업 수행을 위한 정보를 전달, 실행하는 역할을 합니다.
예를 들면 액티비티간의 화면 전환이 있습니다.
Intent는 명시적 인텐트(Explicit Intent)와 암시적 인텐트(Implicit Intent)로 나눌 수 있습니다.
Intent에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 알 수 있는 경우에는 명시적 인텐트
미리 정의된 액션(Action)을 지정해서 안드로이드에서 제공하는 기존 응용 프로그램을 실행하는 것을 암시적 인텐트라고 합니다.
액티비티의 호출간에 정보를 주고 받을 수 있는데 정보를 줄때는 putExtra를 사용하고
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("tag",et.getText().toString());
startActivity(intent);
정보를 받을때는 Get데이터타입Extra를 사용합니다.
Intent intent = getIntent();
String str = intent.getStringExtra("tag");
사용자 정의 객체도 주고 받을 수 있는데 이때는 Parcelable 타입을 사용하면 됩니다.
아래 앱은 ListView, Intent를 사용해서 만든 앱입니다.
전체 코드는 gitHub에서 볼 수 있습니다
https://github.com/Ywook/Android.practice5