RecyclerView Adapter 系列(1):RecyclerView Array Adapter
  E3iP45Ui0TEu 2023年11月02日 53 0


现在,安卓开发者用RecyclerView替代了以前的ListView或GridView。RecyclerView控件是更高级和灵活的ListView版本。这个控件是显示大数据集的容器,只维持有限数量的view就可以高效地滚动。

遗憾的是,不像之前ListView那样,Google并没有给我们提供一个默认的Recycler View Adapter类来继承。我首先将讨论Recycer View Adapter,它可以轻松的将对象列表绑定到你的RecyclerView上。

import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public abstract class RecyclerViewArrayAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH>
{
    private final List<T> items;

    public void bindData(final List<T> items)
    {
        this.items = items;
        this.notifyDataSetChanged();
    }

    public final T getItem(final int position)
    {
        return this.items.get(position);
    }

    public List<T> getItems()
    {
        return items;
    }

    @Override
    public int getItemCount()
    {
        return this.items != null
                ? this.items.size()
                : 0;
    }

    @Override
    public final void onBindViewHolder(final VH holder, final int position)
    {
        final T item = this.getItem(position);
        this.onBindViewHolder(holder, item);
    }

    public abstract void onBindViewHolder(final VH holder, final T item);
}



这个类不难理解,也不包含大量的逻辑,而且它可以避免重复实现包含一个简单列表的Adapter类。

下面代码中你可以找到一个简单的Adapter,这个Adapter用来向一个RecyclerView中显示搜索结果。

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import butterknife.Bind;
import butterknife.ButterKnife;

public class SearchResultsAdapter extends RecyclerViewArrayAdapter<SearchResult, SearchResultsAdapter.SearchResultViewHolder>
    implements View.OnClickListener
{
    private final LayoutInflater layoutInflater;
    private OnItemClickListener onItemClickListener;

    public SearchResultsAdapter(final Context context)
    {
        super();

        this.layoutInflater = LayoutInflater.from(context);
    }

    public void setOnItemClickListener(final OnItemClickListener onItemClickListener)
    {
        this.onItemClickListener = onItemClickListener;
    }

    @Override
    public SearchResultViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType)
    {
        final View view = this.layoutInflater.inflate(R.layout.listitem_search, parent, false);
        view.setOnClickListener(this);

        return new SearchResultViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final SearchResultViewHolder holder, final SearchResult item)
    {
        holder.bindData(item);
    }

     /*
     * View.OnClickListener
     */

    @Override
    public void onClick(final View view)
    {
        if (this.onItemClickListener != null)
        {
            final RecyclerView recyclerView = (RecyclerView) view.getParent();
            final int position = recyclerView.getChildLayoutPosition(view);
            if (position != RecyclerView.NO_POSITION)
            {
                final SearchResult item = this.getItem(position);
                this.onItemClickListener.onItemClicked(item);
            }
        }
    }

    public static class SearchResultViewHolder extends RecyclerView.ViewHolder
    {
        @Bind(R.id.textview_name)
        TextView textViewName;

        public SearchResultViewHolder(final View itemView)
        {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }

        public void bindData(final SearchResult item)
        {
            this.textViewName.setText(item.getName());
        }
    }

    public interface OnItemClickListener
    {
        void onItemClicked(SearchResult item);
    }
}


RecyclerView Adapter 系列(1):RecyclerView Array Adapter_List

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zRK4BzBUK860   2023年11月02日   73   0   0 配置文件服务器ide
  Fo7woytj0C0D   2023年12月23日   31   0   0 pythonsedidepythonidesed
E3iP45Ui0TEu