안드로이드 스튜디오 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


+ Recent posts