안드로이드에서 Custom ListView(커스텀 리스트뷰) 활용하기

spring

커스텀 리스트뷰

안드로이드에서는 리스트뷰라는게 있다. 바로 카카오톡의 친구리스트 같은 것들이다.
안드로이드에서 기본 제공하는 리스트들도 있지만 내가 직접 커스텀하여 사용할 수도 있다.

커스텀 리스트뷰의 필요 항목

먼저 화면에 보여질 xml파일과 그 리스트에 뿌려질 데이터클래스, 본 화면과 연결할  Adapter가 필요하다.

--myitem.xml--

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:textColorLink="@android:color/holo_blue_dark" />

</LinearLayout>

위와 같이 간단히 텍스트만 나오는 뷰이다.

-- BusStationVO.java --

public class BusStationVO {
	private String stationId;
    private String busRouteId;
    private String stationNm;
    private String busRouteNm;
    private String station_X;
    private String station_Y;
    private String stationNum;
    private String ord;
    
	public String getStationId() {
		return stationId;
	}
	public void setStationId(String stationId) {
		this.stationId = stationId;
	}
	public String getBusRouteId() {
		return busRouteId;
	}
	public void setBusRouteId(String busRouteId) {
		this.busRouteId = busRouteId;
	}
	public String getStationNm() {
		return stationNm;
	}
	public void setStationNm(String stationNm) {
		this.stationNm = stationNm;
	}
	public String getBusRouteNm() {
		return busRouteNm;
	}
	public void setBusRouteNm(String busRouteNm) {
		this.busRouteNm = busRouteNm;
	}
	public String getStation_X() {
		return station_X;
	}
	public void setStation_X(String station_X) {
		this.station_X = station_X;
	}
	public String getStation_Y() {
		return station_Y;
	}
	public void setStation_Y(String station_Y) {
		this.station_Y = station_Y;
	}
	public String getStationNum() {
		return stationNum;
	}
	public void setStationNum(String stationNum) {
		this.stationNum = stationNum;
	}
	public String getOrd() {
		return ord;
	}
	public void setOrd(String ord) {
		this.ord = ord;
	}
}
이건 그냥 내가 사용할 데이터 형태이다. 여기서 BusRouteNm 필드를 리스트에 뿌려줄 생각이다.

-- MyListViewAdapter

public class MyListViewAdapter extends BaseAdapter {
    private List<BusStationVO> listViewItemList = new ArrayList<>();
    @Override
    public int getCount() {
        return listViewItemList.size();
    }

    @Override
    public Object getItem(int i) {
        return listViewItemList.get(i) ;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        final int pos = i;
        final Context context = viewGroup.getContext();

        // "listview_item" Layout을 inflate하여 convertView 참조 획득.
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.myitem, viewGroup, false);
        }

        TextView txt = (TextView)view.findViewById(R.id.textView3);

        BusStationVO myItem = listViewItemList.get(i);
        txt.setText(myItem.getStationNm());
        return view;

    }
    // 아이템 데이터 추가를 위한 함수. 개발자가 원하는대로 작성 가능.
    public void addItem(BusStationVO vo) {
        BusStationVO item = new BusStationVO();

        item = vo;

        listViewItemList.add(item);
    }
}

이건 본 화면의 리스트뷰와 내가 새로 만든 xml을 연결해줄 Adapter이다.

그럼 메인 액티비티에서 
ListView listView; 로 리스트뷰를 생성해준다.
private MyListViewAdapter myListViewAdapter; 를 하나 생성해준다.

그 후에 listView 의 인스턴스를 생성해준다.

또 아래의 메서드를 통해 adapter를 생성해준다. 나는 그 아답터에 나의 데이터들을 담아주었다.

protected void initAdapter(List<BusStationVO> list) {
        myListViewAdapter = new MyListViewAdapter();

        for(int i = 0 ; i < list.size(); i++) {
            myListViewAdapter.addItem(list.get(i));
        }

    }
    
그 후에 listView.setAdapter(myListViewAdapter); 를 통해 아답터를 연결해주면 끝이다~~.
효준's profile image

효준

2018-09-14 11:26

다른글 보러가기

안드로이드에서 Volley를 활용한 통신

이전 포스트

스프링 부트에서 MyBatis 활용하기

다음 포스트