2017-12-09 4 views
0

Ich habe in Sortierung Array Liste von Anrufernamen alphabetisch gesucht. Nicht sicher, wie man Sammlungen oder irgendetwas anderes anwendet, das ist ideal? Irgendwelche Ideen, wie man das anstellt? Ich habe ein paar Beispiele online gesehen, aber nichts schien zu helfen.Wie sortiere ich eine Arraylist von Namen alphabetisch?

Nicht sicher, wie es in Bezug auf meinen Code gilt. Mein Code ist wie folgt:

public class GroupCallAdapter extends RecyclerView.Adapter<GroupCallAdapter.CallerViewHolder> { 

private CopyOnWriteArrayList<Caller> callers; 

public GroupCallAdapter(@NonNull final CopyOnWriteArrayList<Caller> callers) { 
    this.callers = callers; 

    for (Caller caller : this.callers) { 

    } 
} 

@Override 
public CallerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    final View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_caller, parent, false); 
    final CallerViewHolder viewHolder = new CallerViewHolder(layout); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(CallerViewHolder holder, int position) { 
    final Caller caller = callers.get(position); 
    final Participant participant = caller.getParticipant(); 

    if (caller.getName() != null) { 
     holder.callerName.setText(caller.getName()); 
    } 

    if (caller.getImage() != null) { 
     holder.callerImage.setImageBitmap(caller.getImage()); 
    } else { 
     holder.callerImage.setImageResource(R.drawable.call_default_profile); 
    } 
    holder.callerImage.setVisibility(View.INVISIBLE); 
    holder.callerImage.setVisibility(View.VISIBLE); 

    final VideoView videoView; 
    if (participant.isMe) { 
     videoView = participant.videoStreamer.videoView; 
    } else { 
     videoView = participant.videoPlayer.videoView; 
    } 
    if (holder.callerVideo.getChildCount() != 0) { 
     holder.callerVideo.removeAllViews(); 
    } 
    if (videoView.getParent() != null) { 
     ViewGroup parent = (ViewGroup) videoView.getParent(); 
     parent.removeView(videoView); 
    } 
    holder.callerVideo.addView(videoView, CallerViewHolder.videoLayoutParams); 

    if (caller.isVideoPaused()) { 
     holder.callerVideo.setVisibility(View.INVISIBLE); 
     holder.callerImage.setVisibility(View.VISIBLE); 
    } else { 
     holder.callerVideo.setVisibility(View.VISIBLE); 
     holder.callerImage.setVisibility(View.INVISIBLE); 
    } 
} 

@Override 
public int getItemCount() { 
    return callers.size(); 
} 

public static final class CallerViewHolder extends RecyclerView.ViewHolder { 

    @BindView(R.id.callerVideo) 
    public ViewGroup callerVideo; 
    @BindView(R.id.callerImage) 
    public ImageView callerImage; 
    @BindView(R.id.callerName) 
    public TextView callerName; 

    protected static FrameLayout.LayoutParams videoLayoutParams = new FrameLayout.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.MATCH_PARENT 
    ); 

    public CallerViewHolder(View itemView) { 
     super(itemView); 
     ButterKnife.bind(this, itemView); 
    } 

} 
+1

Verwenden Sie 'Collections.sort()' irgendwo stromaufwärts, wo immer Sie diese 'CopyOnWriteArrayList' erstellen. Oder verwenden Sie den 'RecyclerView.Adapter' von einer sortierten Kopie der Liste, die er erstellt hat (wiederum mit 'Collections.sort()'). – CommonsWare

Antwort

1

einfach implementieren Anrufer Vergleichbare und dann Collections.sort rufen (Anrufer)

So:

public class Caller implements Comparable<Caller> { 

    String name; 

    public int compareTo(Caller other) { 
     return name.compareTo(other.name); 
    } 

} 

Und dann:

Collections.sort(callers); 
0

Sie können diesen Code verwenden, um eine Liste alphabetisch zu sortieren:

Collections.sort(list); 
0

fand ich eine Antwort von here

Collections.sort(list, new Comparator<String>() { 
@Override 
public int compare(String s1, String s2) { 
    return s1.compareToIgnoreCase(s2); 
} 

});

Verwandte Themen