Android
Android] ListView 구현해보기
김코식
2022. 6. 16. 00:32
리스트 뷰 - 사용자가 정의한 데이터 목록을 나열하여 화면에 표시하는 뷰 그룹의 한 종류
리스트 뷰 사용 예제)
1. activity_main.xml
ㄴ 화면에 보여지는 xml 생성
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="리스트 뷰"
android:textSize="30dp"/>
<ListView
android:id="@+id/list_View"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
2. item_list.xml
ㄴ 리스트 뷰의 구체적인 형태 설정
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/titleText"
android:text="1번"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1번"
android:id="@+id/btn1"
android:gravity="center"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1번 내용"
android:layout_marginStart="20dp"
android:id="@+id/contentText"
android:layout_gravity="center"/>
</LinearLayout>
3. MainActivity.java
package com.example.listview;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ListView list;
String Title[] = {"제목1","제목2","제목3","제목4"}; //리스트 뷰의 title부분
String Content[]={"내용1","내용2","내용3","내용4"}; //리스트 뷰의 content부분
String BtnNum[]={"버튼1","버튼2","버튼3","버튼4"}; //리스트 뷰의 button의 text설정
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView)findViewById(R.id.list_View);
MyAdapter adapter = new MyAdapter(this,Title,Content,BtnNum);
list.setAdapter(adapter);//리스트 어댑터 설정
}
//MyAdapter 설정
class MyAdapter extends ArrayAdapter<String>{
Context context;
String titleR[];
String contentR[];
String btnR[];
MyAdapter(Context context, String title[], String content[], String btn[]) {
super(context,R.layout.item_list,R.id.titleText,title);
this.context = context;
this.titleR = title;
this.contentR = content;
this.btnR = btn;
}
public View getView(int position,@Nullable View convertView,@NonNull ViewGroup parent){
//item_list.xml파일을 객체화 하기 위해 LayoutInflater 사용
LayoutInflater layoutInflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View item_list =layoutInflater.inflate(R.layout.item_list,parent,false);
//xml에서 지정한 Ui요소 사용
Button button = item_list.findViewById(R.id.btn1);
TextView textView = item_list.findViewById(R.id.titleText);
TextView textView2 = item_list.findViewById(R.id.contentText);
button.setText(btnR[position]);
textView.setText(titleR[position]);
textView2.setText(contentR[position]);
//버튼1을 클릭했을 때 이벤트 처리
if(button.getText()=="버튼1"){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(),Btn1Activity.class);
startActivity(intent);
}
});
}
//버튼2를 클릭했을 때 이벤트 처리
else if(button.getText()=="버튼2"){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(),Btn2Activity.class);
startActivity(intent);
}
});
}
//버튼3을 클릭했을 때 이벤트 처리
else if(button.getText()=="버튼3"){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(),Btn3Activity.class);
startActivity(intent);
}
});
}
//버튼4를 클릭했을 때 이벤트 처리
else if(button.getText()=="버튼4"){
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(),Btn4Activity.class);
startActivity(intent);
}
});
}
return item_list;
}
}
}
#어댑터 - 데이터를 받아서 관리하고 어댑터 뷰에 출력할 수 있는 형태로 데이터를 제공하는 객체
(위에서는 어댑터 뷰의 서브클래스인 리스트 뷰로 데이터 출력)
4. activity_btn1~4
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:text="버튼1 액티비티"/>
</LinearLayout>
버튼 1~4의 클릭시 출력되는 activity xml 생성
5. Btn1~4Activity.java
package com.example.listview;
import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
public class Btn1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_btn1);
}
}
6. AndroidManifest.xml
<activity android:name=".Btn1Activity"/>
<activity android:name=".Btn2Activity"/>
<activity android:name=".Btn3Activity"/>
<activity android:name=".Btn4Activity"/>
매니페스트에 액티비티 추가
실행화면
버튼 1 클릭 시