2017-12-09 19 views
0

私はアルファベット順に呼び出し元の名前の配列リストをソートすることを検討しています。 コレクションや他のものを適用する方法がわからない場合は、理想的でしょうか?どのようにそれについて行くすべてのアイデア? 私はいくつかの例をオンラインで見てきましたが、何も役立たないようでした。アルファベット順に名前のarraylistをソートするにはどうすればよいですか?

私のコードに関してどのように適用されるか分かりません。 次のように私のコードは次のとおりです。

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

この 'CopyOnWriteArrayList'を作成しているところで、上流のどこかで' Collections.sort() 'を使用してください。または、この 'RecyclerView.Adapter'を作成したリストのソートされたコピー(' Collections.sort() 'を使って)から取り除いてください。 – CommonsWare

答えて

1

だけで、発信者がComparableを実装して、このようにCollections.sort(発信者)

を呼び出します:

public class Caller implements Comparable<Caller> { 

    String name; 

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

} 

そして:

Collections.sort(callers); 
0

このコードを使用すると、アルファベット順にリストを並べ替えることができます。

Collections.sort(list); 
0

I)は、here

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

}から答えを見つけました。

関連する問題