앱 개발/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을 지워주시기만 하면 됩니다!

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

 

반응형