繁体   English   中英

如何将页脚按钮添加到我的回收站视图

[英]How to add a footer button to my recycler view

我想在我的回收站视图中添加页脚。 我在下面附上了自定义适配器代码。 我怎样才能做到这一点? 我希望按钮用新项目填充回收站视图。 我可以自己操作按钮。 我只面临添加页脚的问题。

我想要如下图所示的东西:

在此处输入图像描述

 package com.example.myapplication.Adapter;

    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.support.v7.widget.CardView;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import com.example.myapplication.Interface.ItemClickListener;
    import com.example.myapplication.Model.RSSObject;
    import com.example.myapplication.R;

    class FeedViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
        public TextView textTitle,txtDate,textContent;
        private ItemClickListener itemClickListener;


    public FeedViewHolder(View itemView) {
        super(itemView);
        textTitle = (TextView) itemView.findViewById(R.id.textTitle);
        txtDate = itemView.findViewById(R.id.textPubDate);
        textContent = itemView.findViewById(R.id.textContent);

        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);
    }

    public FeedViewHolder(View itemView, ItemClickListener itemClickListener) {
        super(itemView);
        this.itemClickListener = itemClickListener;
    }

    @Override
    public void onClick(View v) {

       itemClickListener.onClick(v, getAdapterPosition(), false);

    }

    @Override
    public boolean onLongClick(View v) {
        itemClickListener.onClick(v, getAdapterPosition(), true);
        return true;
    }
}

    public class FeedAdapter extends RecyclerView.Adapter<FeedViewHolder> {
        private RSSObject.RssObject rssObject;
    private Context mContext;
    private LayoutInflater layoutInflater;

    public FeedAdapter(RSSObject.RssObject rssObject, Context mContext) {
        this.rssObject = rssObject;
        this.mContext = mContext;
        layoutInflater = layoutInflater.from(mContext);
    }

    @Override
    public int getItemViewType(int position) {

         
        return super.getItemViewType(position);
    }

    @Override
    public FeedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        final View itemView = layoutInflater.inflate(R.layout.row,parent,false);

       return new FeedViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final FeedViewHolder holder, final int position) {

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String url = rssObject.getItems().get(holder.getAdapterPosition()).getLink();
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                v.getContext().startActivity(i);

            }
        });
        String title = rssObject.getItems().get(position).getTitle();
        title = title.replace("&amp;","");
        holder.textTitle.setText(title);
        String description = rssObject.getItems().get(position).getDescription();
        description = android.text.Html.fromHtml(description).toString();
        holder.textContent.setText(description);
        holder.txtDate.setText(rssObject.getItems().get(position).getPubDate());



    }

    @Override
    public int getItemCount() {

        return rssObject.items.size();


    }
}

有两种方法:如果您想在 xml 文件中的 RecyclerView 下放置一个固定视图,一个内部带有按钮的相对布局(或其他)或者如果您希望按钮作为列表的元素,您应该添加一个带有按钮广告的视图您查看的最后一个 position

如果要添加页脚,则需要将其指定为另一种视图类型。
在您的适配器代码中,您应该添加为页脚创建另一个持有者的逻辑。
请参阅以下 Kotlin 示例:

const val REGULAR_VIEW_TYPE = 0
const val FOOTER_VIEW_TYPE = 1  

class FooterExampleAdapter(
    private val data: List<String>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
    when (viewType) { // Use 'when' to create the correct holder for any position
        REGULAR_VIEW_TYPE -> RegularViewHolder(parent.inflateView(R.layout.regular_layout))
        FOOTER_VIEW_TYPE -> FooterViewHolder(parent.inflateView(R.layout.footer_layout))
    }

// Handle binding by checking holder type
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
    if (holder is RegularViewHolder) holder.bind(data[position])
    else if (holder is FooterViewHolder) holder.bind()
}

override fun getItemCount() = data.size + 1 // We need the extra 1 for the footer to be counted

// Here is where we specify which view type should be presented at position
override fun getItemViewType(position: Int) =
    if (position == data.size) FOOTER_VIEW_TYPE else REGULAR_VIEW_TYPE
}


class RegularViewHolder(v: View) : RecyclerView.ViewHolder(v) {

    fun bind(string: String) {}
}  


class FooterViewHolder(v: View) : RecyclerView.ViewHolder(v) {

    fun bind() {}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM