安卓(Android): 如何在RecyclerView中设置固定项

8

我有一个RecyclerView,当我点击第一个视图时,会像图片中一样添加另一个视图,我的目标是将ID为“1”的“添加”视图固定在recycler的最后一个位置,而不是第一个位置。

enter image description here

我的适配器:

public class AddEventsAdapter extends RecyclerView.Adapter<AddEventsAdapter.ViewHolder> {

   private List<String> items = new ArrayList<>();

    public void addItem(String name) {
        items.add(name);
        notifyItemInserted(items.size() - 1);
    }

    public void removeItem(int position) {
        items.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, items.size());
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.add_event_item, parent, false);

        return new ViewHolder(view);
    }


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

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.setEventNameName(i + "");
        if(position == 0) 
        {
            holder.theLayout.setBackgroundColor(Color.parseColor("#7F9099"));
            holder.eventName.setText("Add");
        }

    }
    static int i;
    class ViewHolder extends RecyclerView.ViewHolder{

        public TextView eventName;
        public RelativeLayout theLayout;




        public ViewHolder(final View itemView) {
            super(itemView);
            eventName = (TextView)itemView.findViewById(R.id.eventName);
            theLayout = (RelativeLayout)itemView.findViewById(R.id.backgroundevent);

            theLayout.setId(++i);

            theLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (getAdapterPosition()>0){
                        removeItem(getAdapterPosition());
                    }else {
                        addItem("");
                    }
                }
            });

        }

        public void setEventNameName(String TheEventName){
            eventName.setText(TheEventName);
        }
    }
}

在这个活动中:
final AddEventsAdapter AddContainer = new AddEventsAdapter();
    AddEventsRecycler.setLayoutManager(new LinearLayoutManager(this));
    AddEventsRecycler.setAdapter(AddContainer);
    AddEventsRecycler.setItemViewCacheSize(666);

    RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
    itemAnimator.setAddDuration(1000);
    itemAnimator.setRemoveDuration(1000);
    AddEventsRecycler.setItemAnimator(itemAnimator);

    AddContainer.addItem("");
2个回答

2

1

你试过这样的吗:

 public void addItem(String name) {
        if (items.size() != 0) {
            removeItem(items.size() - 1);
            items.add(name);
            items.add("Add");
        } else
            items.add("Add");

        notifyItemInserted(items.size() - 1);
    }

添加项目的id为items.size() -1

编辑: 在您的Holder类中将if更改为以下代码:

     if(position == items.size() - 1) 
   {      
         holder.theLayout.setBackgroundColor(Color.parseColor("#7F9099"));
                    holder.eventName.setText("Add");
                }

打开该活动时它会崩溃。 - John Sardinha
什么是异常信息? - MilanNz
java.lang.IndexOutOfBoundsException: 索引越界异常,索引值为0,大小为0。 - John Sardinha
现在它的行为非常奇怪,"添加"按钮仍然停留在顶部,当我点击它时,最后一个视图被移除,并且添加了两个视图。 - John Sardinha
让我们在聊天室中继续这个讨论 - MilanNz
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接