【问题标题】:Android: set fixed item on RecyclerViewAndroid:在 RecyclerView 上设置固定项目
【发布时间】:2016-04-16 22:50:51
【问题描述】:

我有一个 RecyclerView,当我在第一个视图中单击时,它会添加另一个视图,就像图像中一样,我想要将 ID 为“1”的“添加”视图设置为固定在回收站,而不是第一个。

我的适配器:

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("");

【问题讨论】:

    标签: java android android-recyclerview


    【解决方案1】:

    我通过创建一个允许页脚和页眉的自定义适配器解决了这个问题,这是 GitHub 中的项目:https://github.com/u3breeze/android-RecyclerView-WithHeaderAndFooter

    【讨论】:

      【解决方案2】:

      您是否尝试过类似的方法:

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

      【讨论】:

      • 打开活动时崩溃
      • 什么是异常信息?
      • java.lang.IndexOutOfBoundsException: 无效索引 0,大小为 0
      • 现在它的行为非常奇怪,“添加”按钮仍然在顶部,当我点击它时,最后一个视图被删除,它添加了两个视图
      • 现在看看我做了什么并尝试。尝试编写方法,当您单击添加时,首先删除“添加”项目,然后在列表中添加您想要的项目,然后再次添加“添加”项目。也许这不是最好的解决方案,但我可以工作......也许你应该考虑添加按钮“添加”,如 fab 而不是 item。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多