Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags more
Archives
Today
Total
관리 메뉴

맨땅에 코딩

안드로이드 리스트뷰 아이템 정렬(내림차순) 본문

앱 개발/Java

안드로이드 리스트뷰 아이템 정렬(내림차순)

맨땅 2021. 12. 9. 10:21

목차

    반응형
    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을 지워주시기만 하면 됩니다!

    (오름차순 = 제일 오래된 데이터가 상단에 표출)

     

    반응형