【问题标题】:Recyclerview row onClick replace layoutRecyclerview 行 onClick 替换布局
【发布时间】:2016-05-26 22:34:36
【问题描述】:

我正在使用recyclerView,它使用两种类型的视图:一种是HeaderView,位于列表的第一位(位置== 0),第二种是CommentView

我想要的是 onclick() 删除 HeaderView 并将其替换为我已经创建的另一个 xml 布局文件。

这是我必须在 Adapter 类中做的事情吗? 我正在尝试这样:

    @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

       // holder is instance of CommentItem

        } else if (holder instanceof ViewHolderHeaderItem) {
        final ViewHolderHeaderItem viewHolderHeaderItem = (ViewHolderHeaderItem) holder;
        viewHolderHeaderItem.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewHolderHeaderItem.button.setVisibility(View.GONE);

            }
        });

我可以将可见性设置为GONE,但我不知道如何扩展布局。

【问题讨论】:

    标签: android


    【解决方案1】:

    这样的事情对你有帮助吗?

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    
        private static final int TYPE_HEADER = 111;
        private static final int TYPE_COMMENT = 222;
        private boolean mHasHeader = true;
    
        @Override
        public long getItemId(int position) {
            return mHasHeader && position == 0 ? TYPE_HEADER : TYPE_COMMENT;
        }
    
        @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return viewType == TYPE_HEADER
                    ? return new ViewHolderHeaderItem()
                    : return new ViewHolderCommentItem();
        }
    
        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            if (getItemViewType(position) == TYPE_HEADER) {
                final ViewHolderHeaderItem viewHolderHeaderItem = (ViewHolderHeaderItem) holder;
                viewHolderHeaderItem.button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        mHasHeader = false;
                        notifyDataSetChanged();
    
                    }
                });
            } else {
                // bind your comment view
            }
        }
    
        @Override
        public int getItemCount() {
            return 0;
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个,假设有两种布局。

      @Override
          public void onBindViewHolder(ViewHolder holder, final int position) {
              setTypeFace(holder);
              if (position == 0) {
                  holder.header.setVisibility(View.VISIBLE);
                  holder.comment.setVisibility(View.GONE);
              }else
              {
                  holder.header.setVisibility(View.GONE);
                  holder.comment.setVisibility(View.VISIBLE);
              }
          }
      

      你想要这样吗??

      @Override
      public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          View v
          if(viewType==COMMENT) {
              v = LayoutInflater.from(mContext).inflate(R.layout.comment_xml, parent, false);
          }else if(viewType==HEADER)
          {
              v = LayoutInflater.from(mContext).inflate(R.layout.header_xml, parent, false);
          }
          return new ViewHolder(v);
      }
      

      【讨论】:

      • 我不想仅仅改变可见性。我想用一个新的布局来代替 Header
      • 我希望当我单击页眉时发生这种布局膨胀。
      • @Mes 将 viewType 全局化,存储并在点击时检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2016-07-08
      • 1970-01-01
      • 2016-09-05
      • 2020-10-14
      相关资源
      最近更新 更多