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. 浅谈Java中Collections.sort对List排序的两种方法
  2. mybatisplus的坑 insert标签insert into select无参数问题的解决
  3. python起点网月票榜字体反爬案例
  4. Python list sort方法的具体使用
  5. python list.sort()根据多个关键字排序的方法实现
  6. android webclient使用
  7. Android(安卓)带阻尼回弹效果的ScorllView
  8. Android(安卓)SQLiteOpenHelper
  9. AndEngine添加多个动画精灵的方法

随机推荐

  1. Android(安卓)动态切换全屏和非全屏模式
  2. android获取屏幕宽高的两种方法
  3. Debugging on my phone (Eclipse, Androi
  4. Android(安卓)目录操作
  5. android的布局属性中padding和margin的区
  6. Android(安卓)ListView异步加载网络图片
  7. “AndroidManifest.xml 系统找不到指定的
  8. android 禁用解锁
  9. 区分IOS和Android
  10. Idea gradle android 开发问题