1。使用添加依赖lib
2。MainActivity

package com.louisgeek.louisrecyclerviewstickyheadersdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;import android.widget.TextView;import android.widget.Toast;import com.eowise.recyclerview.stickyheaders.OnHeaderClickListener;import com.eowise.recyclerview.stickyheaders.StickyHeadersBuilder;import com.eowise.recyclerview.stickyheaders.StickyHeadersItemDecoration;public class MainActivity extends AppCompatActivity implements OnHeaderClickListener {    private StickyHeadersItemDecoration topStickyHeadersItemDecoration;    RecyclerViewAdapterWithHeader recyclerViewAdapterWithHeader;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        RecyclerView  recyclerView = (RecyclerView)findViewById(R.id.id_rv);        recyclerView.setLayoutManager(new LinearLayoutManager(this));        recyclerViewAdapterWithHeader= new RecyclerViewAdapterWithHeader(this);        recyclerViewAdapterWithHeader.setOnItemClickListener(new RecyclerViewAdapterWithHeader.OnItemClickListener() {            @Override            public void onItemClick(int position, Object object) {                //Toast.makeText(MainActivity.this, "Click on item" + position + ";object:" + object.toString(), Toast.LENGTH_SHORT).show();                //##recyclerViewAdapterWithHeader.addItem(position, "新增数据=点到的是" + position);            }            @Override            public void onItemLongClick(int position, Object object) {               // Toast.makeText(MainActivity.this, "Click long on item" + position + ";object:" + object.toString(), Toast.LENGTH_SHORT).show();                recyclerViewAdapterWithHeader.deleteItem(position);            }        });        topStickyHeadersItemDecoration= new StickyHeadersBuilder()                .setAdapter(recyclerViewAdapterWithHeader)                .setRecyclerView(recyclerView)                .setOnHeaderClickListener(this)                .build();       recyclerView.addItemDecoration(topStickyHeadersItemDecoration);    }    @Override    public void onHeaderClick(View header, long headerId) {        TextView textView= (TextView) header.findViewById(R.id.id_tv_head_item);        Toast.makeText(this, "Click on headerId:" +headerId+";textView="+textView.getText(), Toast.LENGTH_SHORT).show();    }}

3。RecyclerViewAdapterWithHeader

package com.louisgeek.louisrecyclerviewstickyheadersdemo;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 com.eowise.recyclerview.stickyheaders.StickyHeadersAdapter;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class RecyclerViewAdapterWithHeader extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements StickyHeadersAdapter<RecyclerView.ViewHolder> {    private Context mContext;    private OnItemClickListener listener;    private List<Map<String, Object>> mapList = new ArrayList<>();    private List<String> tempItems = new ArrayList<>();    private LinkedHashMap<String, Boolean> linkedHashMap;    public RecyclerViewAdapterWithHeader(Context context) {        this.mContext = context;       /* String[] countries =mContext.getResources().getStringArray(R.array.countries_cn); listStr=Arrays.asList(countries);*/        for (int i = 0; i < 3; i++) {            Map<String, Object> map = new HashMap<>();            map.put("name", "AA" + i);            mapList.add(map);        }        for (int i = 0; i < 5; i++) {            Map<String, Object> map = new HashMap<>();            map.put("name", "BB" + i);            mapList.add(map);        }        for (int i = 0; i < 8; i++) {            Map<String, Object> map = new HashMap<>();            map.put("name", "CC" + i);            mapList.add(map);        }        //2016年4月12日10:41:08        setHasStableIds(true);    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = (View) LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);        return new MyViewHolder(view);    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {        final MyViewHolder myViewHolder = (MyViewHolder) holder;        //final int realPosition=myViewHolder.getPosition();        myViewHolder.mTextView.setText(mapList.get(position).get("name").toString() + " pos:" + position);        myViewHolder.mTextView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (null != listener) {                    listener.onItemClick(position, mapList.get(position));                }            }        });        myViewHolder.mTextView.setOnLongClickListener(new View.OnLongClickListener() {            @Override            public boolean onLongClick(View v) {                if (null != listener) {                    listener.onItemLongClick(position, mapList.get(position));                }                return false;            }        });    }    @Override    public int getItemCount() {        return mapList.size();    }    //必须重写 不然item会错乱    @Override    public long getItemId(int position) {        //return super.getItemId(position);        // return countries[position].hashCode();        return position;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent) {        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_header, parent, false);        return new MyHeaderViewHolder(itemView);    }    @Override    public void onBindHeaderViewHolder(RecyclerView.ViewHolder viewHolder, int position) {        MyHeaderViewHolder myHeaderViewHolder = (MyHeaderViewHolder) viewHolder;        myHeaderViewHolder.title.setText(mapList.get(position).get("name").toString().subSequence(0, 1) + " pos:" + position);        //headerViewHolder.title.setText(countries[position].subSequence(0, 1));    }    @Override    public long getHeaderId(int position) {        /* if (position<3){ return 0; }else if (position<5){ return 1; }else if (position<8){ return 2; }else { return 3; }*/        return mapList.get(position).get("name").toString().subSequence(0, 1).hashCode();    }    public class MyViewHolder extends RecyclerView.ViewHolder {        public TextView mTextView;        public MyViewHolder(View view) {            super(view);            mTextView = (TextView) view.findViewById(R.id.id_tv_item);        }    }    public static class MyHeaderViewHolder extends RecyclerView.ViewHolder {        TextView title;        public MyHeaderViewHolder(View itemView) {            super(itemView);            title = (TextView) itemView.findViewById(R.id.id_tv_head_item);        }    }    void addItem(int position, Object object) {        Map<String, Object> map = new HashMap<>();        map.put("name", "新的数据" + position);        mapList.add(position, map);        //notifyDataSetChanged();        notifyItemInserted(position);    }    void deleteItem(int position) {        mapList.remove(position);        //暂时解决RecyclerView删除第一项报错问题 IndexOutOfBoundsException Invalid item position        if (position == 0) {            notifyDataSetChanged();        } else {            notifyItemRemoved(position);        }        //后来发现https://github.com/lucasr/twoway-view/issues/134 有同样的问题 2016-4-12 20:10:49    }    /** * 内部接口回调方法 */    public interface OnItemClickListener {        void onItemClick(int position, Object object);        void onItemLongClick(int position, Object object);    }    /** * 设置监听方法 * * @param listener */    public void setOnItemClickListener(OnItemClickListener listener) {        this.listener = listener;    }}

效果

demo:https://github.com/louisgeek/LouisRecyclerViewStickyHeadersDemo

更多相关文章

  1. AndEngine添加多个动画精灵的方法
  2. Android arm模拟器的速度提升方法
  3. android保存第一次安装状态并初始化数据
  4. Android getResources().getColor() 过时 替代方法111
  5. Android点击事件方法
  6. Android的数据过滤机制
  7. android使用HTTP协议读取数据
  8. canvas.drawRoundRect方法,绘制圆角矩形
  9. android升级数据库(Sqlite)简单示例

随机推荐

  1. Android加载/处理超大图片神器!Subsamplin
  2. Android(安卓)Gradle权威指南
  3. Android关于短信加密
  4. Android(安卓)Uevent
  5. Android(安卓)IPC 通讯机制源码分析
  6. Android周学习Step By Step(6)--Android的
  7. Android(安卓)Handler详解
  8. Android(安卓)如何在Eclipse中查看Androi
  9. Android简明开发教程二十四:总结及示例代
  10. Android(安卓)Layout XML属性