2016-05-22 3 views
0

Ich bin auf der Suche nach einer Möglichkeit, meine Artikel in meinem Listenansicht zu sortieren. Dies ist eine Mehrfachlistenansicht mit 3 Elementen für jede Zeile. Ich benutze einen benutzerdefinierten ListViewAdapter, um dies zu erreichen, aber sie sind in der Reihenfolge der Einführung in der ArrayList sortiert. Etwas wie:Bestellen Sie Artikel in einer Multi-Werte-Listview Android

1-2-3-4-5-6 .... Ich möchte diese Reihenfolge inverse, mit oben in meinem Listview den letzten Artikel eingeführt: 6-5-4-3- 2-1 ....

hier ist meine Gewohnheit ListViewAdapter:

public class ListViewAdapter extends BaseAdapter { 
static class ViewHolder { 
    TextView number; 
    TextView elapsedTime; 
    TextView totalTime; 
} 

public static final String FIRST_COLUMN="First"; 
public static final String SECOND_COLUMN="Second"; 
public static final String THIRD_COLUMN="Third"; 

public ArrayList<HashMap<String, String>> list; 
Activity activity; 

public ListViewAdapter(Activity activity,ArrayList<HashMap<String, String>> list){ 
    super(); 
    this.activity=activity; 
    this.list=list; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return list.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return list.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 



@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    LayoutInflater inflater=activity.getLayoutInflater(); 
    final ViewHolder viewHolder; 

    if(convertView == null){ 
     convertView = inflater.inflate(R.layout.timer_row, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.number = (TextView) convertView.findViewById(R.id.number); 
     viewHolder.elapsedTime = (TextView) convertView.findViewById(R.id.elapsed_time); 
     viewHolder.totalTime =(TextView) convertView.findViewById(R.id.total_time); 
     convertView.setTag(viewHolder); 
    } 
    else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    HashMap<String, String> map=list.get(position); 
    viewHolder.number.setText(map.get(FIRST_COLUMN)); 
    viewHolder.elapsedTime.setText(map.get(SECOND_COLUMN)); 
    viewHolder.totalTime.setText(map.get(THIRD_COLUMN)); 

    return convertView; 
} 

}

Und hier ist, wie ich es in meiner Tätigkeit nennen:

//ListView Adapter 
    mListviewLayout = (RelativeLayout)v.findViewById(R.id.listview_times_layout); 

    mTimesListview = (ListView)v.findViewById(R.id.times_listview); 
    mTimesArrayList = new ArrayList<HashMap<String,String>>(); 
    mListViewAdapter= new ListViewAdapter(mActivity, mTimesArrayList); 
    mTimesListview.setAdapter(mListViewAdapter); 

Schließlich ist hier, wie ich Elemente in der HashMap vorstellen:

btnNextCicle.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isTimerPaused()) { 
       onTimerStop(); 
      } else { 
       mListviewLayout.setVisibility(View.VISIBLE); 
       mCiclesCounter++; 
       HashMap<String, String> newEntry = new HashMap<String, String>(); 
       newEntry.put(ListViewAdapter.FIRST_COLUMN, "#" + mCiclesCounter); 
       newEntry.put(ListViewAdapter.SECOND_COLUMN, Util.getTimeForTimer(mElapsedCicleTime)); 
       newEntry.put(ListViewAdapter.THIRD_COLUMN, Util.getTimeForTimer(mTimeInMilliseconds)); 
       mCicleStartTime = SystemClock.elapsedRealtime(); 
       mTimesArrayList.add(newEntry); 
      } 
     } 
    }); 

Hoffnung, dass jemand meine mit meinem Problem helfen können!

Vielen Dank!

Antwort

2

Sie können Unterklasse HashMap<String, Sting> und machen es implementiert Comparable. Dann können Sie Arrays.sort(yourComparable) verwenden, um das Array nach Ihren Wünschen zu sortieren.

+1

Es hat funktioniert! Danke Kumpel –