Java 如何在RecyclerView项中放置数组?

Java 如何在RecyclerView项中放置数组?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想在RecyclerView的第一项中放置一个名称数组(NomUser)。所以我知道我需要更改构造函数的字符串put String[],但是当我做一个新的PendingTrajectPOJO时,我如何才能放置信息呢 这是我放信息的地方 listPendingTraject.add(new PendingTrajectPOJO(nomUser,"Surname","Origin","Destination",Data)); adapter = new AdapterPending

我想在RecyclerView的第一项中放置一个名称数组(NomUser)。所以我知道我需要更改构造函数的字符串put String[],但是当我做一个新的PendingTrajectPOJO时,我如何才能放置信息呢

这是我放信息的地方

 listPendingTraject.add(new PendingTrajectPOJO(nomUser,"Surname","Origin","Destination",Data));

    adapter = new AdapterPendingTraject(listPendingTraject);
    recyclerPendingTraject.setAdapter(adapter);
这是我的构造函数

public PendingTrajectPOJO(String name, String surName, String origin, String destination, String date) {
    Name = name;
    SurName = surName;
    Origin = origin;
    Destination = destination;
    Date = date;
}
我的适配器

public class AdapterPendingTraject extends RecyclerView.Adapter<AdapterPendingTraject.ViewHolderPendingTraject>{

ArrayList<PendingTrajectPOJO> listPendingTraject;

public AdapterPendingTraject(ArrayList<PendingTrajectPOJO> listPendingTraject) {
    this.listPendingTraject = listPendingTraject;
}

@Override
public ViewHolderPendingTraject onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.pending_traject_item,null,false);
    return new ViewHolderPendingTraject(view);
}

@Override
public void onBindViewHolder(ViewHolderPendingTraject holder, int position) {
    holder.Name.setText(listPendingTraject.get(position).getName());
    holder.Surname.setText(listPendingTraject.get(position).getSurName());
    holder.Origin.setText(listPendingTraject.get(position).getOrigin());
    holder.Destination.setText(listPendingTraject.get(position).getDestination());
    holder.Date.setText(listPendingTraject.get(position).getDate());

    holder.itemView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Context context = v.getContext();
            Intent intent = new Intent(context, Journey.class);
            //intent.putExtra("FileName", list.get(position));
            context.startActivity(intent);
        }
    });
}

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

public class ViewHolderPendingTraject extends RecyclerView.ViewHolder {

    TextView Name,Surname,Origin,Destination,Date;
    public ViewHolderPendingTraject(View itemView) {
        super(itemView);
        Name=(TextView)itemView.findViewById(R.id.tvptName);
        Surname=(TextView)itemView.findViewById(R.id.tvptSurName);
        Origin=(TextView)itemView.findViewById(R.id.tvptOrigin);
        Destination=(TextView)itemView.findViewById(R.id.tvptDestination);
        Date=(TextView)itemView.findViewById(R.id.tvptDate);
    }

}
公共类AdapterPendingTraject扩展了RecyclerView.Adapter{
ArrayList-PendingTraject;
公共适配器PendingRaject(阵列列表PendingRaject){
this.listpendingtrajet=listpendingtrajet;
}
@凌驾
public ViewHolderPendingTraject onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.布局.待处理项目,空,假);
返回新的ViewHolderPendingTraject(视图);
}
@凌驾
BindViewHolder上的公共无效(ViewHolderPendingTraject holder,内部位置){
holder.Name.setText(listPendingTraject.get(position.getName());
holder.LANSAME.setText(listPendingTraject.get(position.getNames());
holder.Origin.setText(listPendingTraject.get(position.getOrigin());
holder.Destination.setText(listPendingTraject.get(position.getDestination());
holder.Date.setText(listPendingTraject.get(position.getDate());
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Context=v.getContext();
意图=新意图(上下文、旅程、类);
//intent.putExtra(“文件名”,list.get(位置));
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回listPendingTraject.size();
}
公共类ViewHolderPendingTraject扩展了RecyclerView.ViewHolder{
TextView名称、姓氏、来源、目的地、日期;
公共ViewHolderPendingTraject(查看项目视图){
超级(项目视图);
Name=(TextView)itemView.findViewById(R.id.tvptName);
姓氏=(TextView)itemView.findViewById(R.id.tvptNames);
Origin=(TextView)itemView.findViewById(R.id.tvptOrigin);
Destination=(TextView)itemView.findViewById(R.id.tvptDestination);
日期=(TextView)itemView.findViewById(R.id.tvptDate);
}
}

}

在适配器中,创建一个接受
PendingTrajectPOJO
作为参数的自定义方法,然后更新
列表pendingtraject

例如:

public void addNewItem(PendingTrajectPOJO p) {
    listPendingTraject.add(p);
    notifyDataSetChanged();
}

您要做的是在适配器中创建一个公共方法以传入新项。在这个方法中,您需要通知适配器您已经更新了项目。我建议使用DiffUtil来找出哪些项发生了如下更改:

public void addNewItem(PendingTrajectPOJO p) {
    ArrayList<PendingTrajectPOJO> old = new ArrayList<PendingTrajectPOJO>(listPendingTraject)

    this.listPendingTraject = new ArrayList<PendingTrajectPOJO>()
    this.listPendingTraject.add(p)
    this.listPendingTraject.addAll(old)

    DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffCallback(old, this.listPendingTraject));
    diffResult.dispatchUpdatesTo(this);
}
public void addNewItem(PendingTrajectPOJO p){
ArrayList old=新的ArrayList(listPendingTraject)
this.listPendingTraject=new ArrayList()
this.listPendingTraject.add(p)
this.listPendingTraject.addAll(旧)
DiffUtil.diffesult diffesult=DiffUtil.calculateDiff(新的MyDiffCallback(旧的,this.ListPendingTrajet));
diffResult.dispatchUpdatesTo(本);
}
这样,当您添加项目时,它将设置它们的动画,并将旧项目向下滑动(因为您提到希望顶部项目成为新项目)


注意:我必须在稍后进行测试,我是动态编写的

我会警告不要使用
notifyDataSetChanged()
,而是使用
notifyItemInserted()
。或者更好地使用
DiffUtil
。见: