물에 살고싶은 개발자

리스트뷰 만들기 심플 예제 본문

Android

리스트뷰 만들기 심플 예제

돼지사랑 2017. 4. 5. 15:17

1. 액티비티 레이아웃에 리스트뷰 추가(위치조정은 알아서 ^-')

activity.xml

<ListView
android:id="@+id/BoardListView"/>


2.해당 액티비티의 자바코드에서 객체 생성 

Activity.java

ListView mListView ;
BoardListAdapter mAdapter ;


3.어댑터와 리스트뷰 객체를 초기화

Activity.java

mAdapter = new BoardListAdapter(this);
mListView = (ListView) findViewById(R.id.BoardListView);


4.어댑터 세팅

Activity.java

mListView.setAdapter(mAdapter);


5.어댑터 클래스 만들기(2번 이전에 미리 만들어놓고 2,3,4를 해도됨)

BoardListAdapter.java

class BoardListAdapter extends BaseAdapter {

ArrayList<BoardListItem> boardListItems = new ArrayList<>();
BoardListItem item ;
Context context;

public BoardListAdapter(Context context) {
super();
this.context = context;
} }

6.베이스어댑터를 상속하는 순간 생기는 빨간줄 해소를 위해 4개의 메서드를 오버라이드

컨트롤+O나 빨간줄에 커서대고 알트+엔터로 한큐에 만들어주자


7.목적에 따라 다를 수 있지만 기본적으로는 getView를 제외한 다른 메서드들을 아래와 같이 설정


public int getCount() {
return boardListItems.size();
}

public Object getItem(int position) {
return boardListItems.get(position);
}
public long getItemId(int position) {
return position;
}

8.데이터클래스를 생성(어댑터와 마찬가지로 가장 먼저 해도됨)

BoardListItem.java (getter,setter 생략함)

public class BoardListItem implements Serializable{

//게시물의 상태
private int isImage;
private String commentCount;
private String hits;
private String contentRecommend;
private String createDate;

//게시물의 정보
private String userName;
private String userPassword;
private String contentTitle;
private String contentText;
private Bitmap contentImage;


9.아이템이 될 레이아웃 생성 및 꾸미기(어댑터나 데이터클래스와 마찬가지로 먼저 생성 해도됨)

(이건 코드가 길고 스샷찍기도 애매해서 생략함, 구글링 ㄱㄱ)


10.getView에서 xml에 있는 레이아웃과 뷰들을 객체에 연결시켜줌. ( faet.Inflater : 레이아웃을 뷰로 만들어 객체화시켜줌)

listview_board_item이 9번에서 만든 레이아웃임(뒤에 null에 대해서는 따로 알아볼것, 일단은 null로 통일ㅋ)

LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listview_board_item, null);

예를들면 이런식으로 연결

TextView title = (TextView) convertView.findViewById(R.id.contentTitle);

그리고 리스트에서 불러다가

BoardListItem boardListItem = boardListItems.get(position);

데이터를 뷰에다가 세팅

title.setText(boardListItem.getContentTitle());


11.리스트뷰의 성능 최적화를 위해 다음과 같이 코드를 살짝 바꿔주자 (For 메모리)


if (convertView == null) {
item = new BoardListItem();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.listview_board_item, null);
}


12. 혹시나 해서 getView 메서드의 마지막에 


return convertView;



이게 커스텀 리스트뷰의 기본형태이고 추가삭제등등의 여러 기능들은 이걸 기반으로 응용해서 이케이케 해나가자

Comments