일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 뒤로가기 안됨
- sourcetree
- 리액트
- AWS
- flutter
- 디버깅
- git인증
- 빌드 오류
- 리액트 네이티브
- not working
- bitbucket
- 예제
- VisualStudio
- gradle
- EC2
- Invalid credentials
- 개발환경설정
- aPK
- 안드로이드
- 안됨
- WPF
- react-native
- 설정
- Git
- 인증문제해결
- 데이터바인딩
- Android
- react
- Kotlin
- 안드로이드 스튜디오
- Today
- Total
물에 살고싶은 개발자
리스트뷰 만들기 심플 예제 본문
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;
이게 커스텀 리스트뷰의 기본형태이고 추가삭제등등의 여러 기능들은 이걸 기반으로 응용해서 이케이케 해나가자