반응형
package org.techtown.dlfdlrhddl;
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 ListViewAdapter extends BaseAdapter {
ArrayList<ListViewAdapterData> list = new ArrayList<ListViewAdapterData>();
@Override
public int getCount() {
return list.size(); //그냥 배열의 크기를 반환하면 됨
}
@Override
// public ListViewAdapterData getItem(int i) {
public Object getItem(int i) {
return list.get(i); //배열에 아이템을 현재 위치값을 넣어 가져옴
}
@Override
public long getItemId(int i) {
return i; //그냥 위치값을 반환해도 되지만 원한다면 아이템의 num 을 반환해도 된다.
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
final Context context = viewGroup.getContext();
//리스트뷰에 아이템이 인플레이트 되어있는지 확인한후
//아이템이 없다면 아래처럼 아이템 레이아웃을 인플레이트 하고 view객체에 담는다.
if(view == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listview,viewGroup,false);
}
//이제 아이템에 존재하는 텍스트뷰 객체들을 view객체에서 찾아 가져온다
TextView tvId = (TextView)view.findViewById(R.id.item_tv_id);
TextView tvName = (TextView)view.findViewById(R.id.item_tv_name);
TextView tvAge = (TextView)view.findViewById(R.id.item_tv_age);
TextView tvAddress = (TextView)view.findViewById(R.id.item_tv_address);
//현재 포지션에 해당하는 아이템에 글자를 적용하기 위해 list배열에서 객체를 가져온다.
ListViewAdapterData listdata = list.get(i);
//가져온 객체안에 있는 글자들을 각 뷰에 적용한다
tvId.setText(Integer.toString(listdata.get_id())); //원래 int형이라 String으로 형 변환
tvName.setText(listdata.getName());
tvAge.setText(listdata.getAge());
tvAddress.setText(listdata.getAddress());
return view;
}
//ArrayList로 선언된 list 변수에 목록을 채워주기 위함 다른방식으로 구현해도 됨
public void addItemToList(int num, String name, String age, String address){
ListViewAdapterData listdata = new ListViewAdapterData();
listdata.set_id(num);
listdata.setName(name);
listdata.setAge(age);
listdata.setAddress(address);
//값들의 조립이 완성된 listdata객체 한개를 list배열에 추가
list.add(listdata);
}
}
제 ListViewAdapter.java 파일입니다
여기서 리스트뷰의 아이템을 내림차순으로 정렬하고 싶어서 찾아보니 comparator, sortorder 등 많은 방법이 있었으나
Collections.sort(List, new Comparator() {
@Override
public int compare(Data a1, Data a2) {
return a1.getDate().compareTo(a2.getDate());
}
});
제 코드에 적용하기 어려워서 좋은 방법이 뭐가 있을까 찾아보았습니다
그러다 발견한부분!!
위 ListViewAdapter.java 파일에서
//값들의 조립이 완성된 listdata객체 한개를 list배열에 추가
list.add(listdata);
를
//값들의 조립이 완성된 listdata객체 한개를 list배열에 추가
list.add(0, listdata);
이렇게만 바꿔주시면 리스트뷰 아이템 내림차순 정렬 성공!
(내림차순 = 제일 최근 데이터가 상단에 표출)
컨트롤+왼쪽 마우스 클릭 하셨을때 ArrayList.Java에서 이 함수로 연결된다면 맞게 하신겁니다
다시 리스트뷰 데이터를 오름차순으로 정렬하고 싶으시다면 0을 지워주시기만 하면 됩니다!
(오름차순 = 제일 오래된 데이터가 상단에 표출)
반응형
'앱 개발 > Java' 카테고리의 다른 글
[안드로이드] 레이아웃 배경색 어둡게 (0) | 2022.01.03 |
---|---|
[안드로이드] 권한 요청 팝업 (한번에 여러개 요청) (0) | 2022.01.03 |
안드로이드 DB 데이터 csv 파일로 추출 (0) | 2021.12.23 |
자바 16진수 문자 출력할때 ffff 출력 현상 + 쉬프트연산 및 계산 (0) | 2021.12.22 |
자바 비트 연산, 쉬프트 연산자 (0) | 2021.12.22 |