【问题标题】:How do I sort an arraylist of names alphabetically?如何按字母顺序对名称的数组列表进行排序?
【发布时间】:2017-12-09 22:09:55
【问题描述】:

我一直在研究按字母顺序排列来电者姓名的数组列表。 不确定如何应用集合或其他任何东西,哪个是理想的?关于如何去做的任何想法? 我在网上看到了几个例子,但似乎没有任何帮助。

不确定它如何应用于我的代码。 我的代码如下:

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);
    }

}

【问题讨论】:

  • 在上游某处使用Collections.sort(),无论您在何处创建此CopyOnWriteArrayList。或者,让这个RecyclerView.Adapter 使用它创建的列表的排序副本(同样,使用Collections.sort())。

标签: android android-layout listview android-arrayadapter


【解决方案1】:

让调用者实现 Comparable 然后调用 Collections.sort(callers)

像这样:

public class Caller implements Comparable<Caller> {

    String name;

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

}

然后:

Collections.sort(callers);

【讨论】:

    【解决方案2】:

    您可以使用此代码按字母顺序对列表进行排序:

    Collections.sort(list);
    

    【讨论】:

      【解决方案3】:

      我从here找到了答案。

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

      【讨论】:

        猜你喜欢
        • 2011-10-13
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        相关资源
        最近更新 更多