2

Comparator를 사용하여 객체의 ArrayList를 올바르게 정렬 한 다음이 정렬 된 배열을 사용자 정의 배열 어댑터로 전달하는 방법은 무엇입니까?Comparator 및 사용자 정의 ArrayAdapter를 사용하여 객체로 ArrayList 정렬

내가 그런 시도 : ArrayList를의

내용 클래스 :

public class CoursesData { 
private String url; 
private String name; 
private String lessonsCount; 
private String isFree; 
private String price; 
private String language; 
private String difficulty; 

private AuthorData author; 

.....getters-setters 
} 

비교기 :

class CoursesPriceComparator implements Comparator <CoursesData> { 
public int compare (CoursesData left, CoursesData right){ 
    return left.getPrice().compareTo(right.getPrice()); 
} 
} 

에서 OnCreate에서 어댑터 설정 :

 mAdapter = new CoursesItemAdapter(getActivity(), 
      R.layout.catalog_list_item, 
      Collections.sort(parserJson.getCourses(), new CoursesPriceComparator())); 

.. 점점 잘못되고있다. 또는 여기에 : 나는 정의 ArrayAdapter와를 사용하고 있기 때문에 enter image description here

을 ... 같은 인 :

class CoursesItemAdapter extends ArrayAdapter<CoursesData> { 
private Activity myContext; 
private ArrayList<CoursesData> datas; 

public CoursesItemAdapter(Context context, int textViewResourceId, ArrayList<CoursesData> objects){ 
    super(context, textViewResourceId, objects); 

    myContext = (Activity) context; 
    datas = objects; 
} 

public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolder viewHolder; 

    if(convertView == null) { 
     LayoutInflater inflater = myContext.getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.catalog_list_item, null); 

     viewHolder = new ViewHolder(); 
     viewHolder.postNameView = (TextView) convertView.findViewById(R.id.courses_name); 
     viewHolder.postDifficultyView = (TextView) convertView.findViewById(R.id.difficulty); 
     viewHolder.postAuthorView = (TextView) convertView.findViewById(R.id.author); 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 


    viewHolder.postNameView.setText(datas.get(position).getName()); 
    viewHolder.postAuthorView.setText(datas.get(position).getAuthor().getName()); 
    viewHolder.postDifficultyView.setText(datas.get(position).getDifficulty()); 

    return convertView; 
} 
    static class ViewHolder{ 
    TextView postNameView; 
    TextView postAuthorView; 
    TextView postDifficultyView; 
} 

가 어떻게이 대등 작업을하기 위해이 어댑터를 수정해야합니까?

도움 주셔서 감사합니다.

답변

3

Collections.sort(이 정렬 된 컬렉션을 반환한다고 가정합니다.

mAdapter = new CoursesItemAdapter(getActivity(), 
      R.layout.catalog_list_item, 
      Collections.sort(parserJson.getCourses(), new CoursesPriceComparator())); 

ArrayList<CoursesData> data = parserJson.getCourses(); 
Collections.sort(parserJson.getCourses(), new CoursesPriceComparator()) 
mAdapter = new CoursesItemAdapter(getActivity(), 
      R.layout.catalog_list_item, 
      data); 

Collection.sort 반환 형식이 무효되어야한다. 여기를 확인하십시오. documentation

관련 문제