java-androidStudio
안드로이드 스튜디오 ListView 항목 나타내기
uwaTech
2022. 1. 14. 10:46
만만하게 봤다가 헤매는 ListView. DB 연결하기 전에 구조먼저 짜보자
필요한 xml 파일 2개 : activity_listview_main화면, layout_listview 화면
필요한 java 파일 3개 : ListviewActivity, VO, Adapter
구현하기 전에 전체적인 순서는 다음과 같다.
1. activity_listview_main.xml 에 listView 생성
2. layout_listview.xml에 layout 생성
3. VO.java에 layout에 표현할 변수 선언
4. Adapter.java에 layout 연결하기 + VO에 선언된 변수 가져오기
5. ListviewActivity.java에 adapter 연결하기
시작해보자.
1 activity_listview_main.xml 에 listView 생성
<?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">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
2 layout_listview.xml에 layout 생성
<?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="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/text1"
android:text="하늘"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/text2"
android:text="산"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/text3"
android:text="강"/>
</LinearLayout>
3 VO.java에 layout에 표현할 변수 선언
package user.example.myapplication;
public class VO {
public String t1;
public String t2;
public String t3;
public void setT1(String txt1){
t1 = txt1;
}
public void setT2(String txt2){
t2=txt2;
}
public void setT3(String txt3){
t3 = txt3;
}
public String getT1(){
return this.t1;
}
public String getT2(){
return this.t2;
}
public String getT3(){
return this.t3;
}
}
4 Adapter.java에 layout 연결하기 + VO에 선언된 변수 가져오기
package user.example.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class Adapter extends BaseAdapter { //BaseAdapter를 반드시 상속해야 한다.
private ArrayList<VO> VO= new ArrayList<VO>();
private TextView text1;
private TextView text2;
private TextView text3;
//1. 생성자
public ReportAdapter(){
}
//2.BaseAdapter 상속받으면 자동으로 생기는 메소드들
//2.1. Adapter에 사용되는 데이터의 개수를 리턴
@Override
public int getCount() {
return reportVO.size();
}
//2.2. 지정한 position에 있는 데이터 리턴
@Override
public Object getItem(int position) {
return reportVO.get(position);
}
//2.3. 지정한 position에 있는 데이터와 관계된 아이템(row)의 ID를 리턴
@Override
public long getItemId(int position) {
return position;
}
// position : 리턴 할 자식 뷰의 위치
// convertView : 메소드 호출 시 position에 위치하는 자식 뷰 ( if == null 자식뷰 생성 )
// parent : 리턴할 부모 뷰, 어댑터 뷰
//2.4. position에 위치한 데이터를 화면에 출력하는데 사용될 View를 리턴.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
final Context context = parent.getContext();
if(convertView == null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView=inflater.inflate(R.layout.layout_listview, parent, false);
}
VO vo = VO.get(pos);
text1 = (TextView)convertView.findViewById(R.id.text1);
text1.setText(vo.getT1());
text2 = (TextView)convertView.findViewById(R.id.text2);
text2.setText(vo.getT2());
text3 = (TextView)convertView.findViewById(R.id.text3);
text3.setText(vo.getT3());
return convertView;
}
//3. 다음단계에서 addItem 메소드 정의가 필요함
public void addItem(String t1,String t2, String t3){
VO vo = new VO();
vo.setT1(t1);
vo.setT2(t2);
vo.setT3(t3);
VO.add(vo);
}
}
5. ListviewActivity.java에 adapter 연결하기
public class ListViewActivity extends AppCompatActivity {
private ListView listView;
private ReportAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview_main);
onSetAdapter();
}
//listView UI와 연결
public void onSetAdapter(){
adapter = new ReportAdapter();
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
adapter.addItem("구름","나무","물고기");
adapter.notifyDataSetChanged();
}
}