国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android RecycleView添加head配置封裝的實(shí)例

2019-10-22 18:28:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Android RecycleView添加head配置封裝的實(shí)例

這個(gè)是把RecycleView的適配器給封裝了,直接調(diào)用就可以了,還添加了可以添加head頭部功能,很贊的,今天記下來(lái),下次直接用 

實(shí)例代碼:

package com.wwl.android;  import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.View; import android.view.ViewGroup;  import java.util.ArrayList;   public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    public static final int TYPE_HEADER = 0;   public static final int TYPE_NORMAL = 1;    private ArrayList<T> mDatas = new ArrayList<>();    private View mHeaderView;    private OnItemClickListener mListener;    public void setOnItemClickListener(OnItemClickListener li) {     mListener = li;   }    public void setHeaderView(View headerView) {     mHeaderView = headerView;     notifyItemInserted(0);   }    public View getHeaderView() {     return mHeaderView;   }    public void addDatas(ArrayList<T> datas) {     mDatas.addAll(datas);     notifyDataSetChanged();   }    @Override   public int getItemViewType(int position) {     if(mHeaderView == null) return TYPE_NORMAL;     if(position == 0) return TYPE_HEADER;     return TYPE_NORMAL;   }    @Override   public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {     if(mHeaderView != null && viewType == TYPE_HEADER) return new Holder(mHeaderView);     return onCreate(parent, viewType);   }     @Override   public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {     if(getItemViewType(position) == TYPE_HEADER) return;      final int pos = getRealPosition(viewHolder);     final T data = mDatas.get(pos);     onBind(viewHolder, pos, data);      if(mListener != null) {       viewHolder.itemView.setOnClickListener(new View.OnClickListener() {         @Override         public void onClick(View v) {           mListener.onItemClick(pos, data);         }       });     }   }    @Override   public void onAttachedToRecyclerView(RecyclerView recyclerView) {     super.onAttachedToRecyclerView(recyclerView);      RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();     if(manager instanceof GridLayoutManager) {       final GridLayoutManager gridManager = ((GridLayoutManager) manager);       gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {         @Override         public int getSpanSize(int position) {           return getItemViewType(position) == TYPE_HEADER               ? gridManager.getSpanCount() : 1;         }       });     }   }    @Override   public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) {     super.onViewAttachedToWindow(holder);     ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();     if(lp != null         && lp instanceof StaggeredGridLayoutManager.LayoutParams         && holder.getLayoutPosition() == 0) {       StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;       p.setFullSpan(true);     }   }    public int getRealPosition(RecyclerView.ViewHolder holder) {     int position = holder.getLayoutPosition();     return mHeaderView == null ? position : position - 1;   }    @Override   public int getItemCount() {     return mHeaderView == null ? mDatas.size() : mDatas.size() + 1;   }    public abstract RecyclerView.ViewHolder onCreate(ViewGroup parent, final int viewType);   public abstract void onBind(RecyclerView.ViewHolder viewHolder, int RealPosition, T data);    public class Holder extends RecyclerView.ViewHolder {     public Holder(View itemView) {       super(itemView);     }   }    public interface OnItemClickListener<T> {     void onItemClick(int position, T data);   } } 

  然后在外面自己的適配器中直接繼承就可以了

package com.wwl.android;  import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;  /**  * wwl  */ public class MyAdapter extends BaseRecyclerAdapter<String> {    @Override   public RecyclerView.ViewHolder onCreate(ViewGroup parent, int viewType) {     View layout = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);     return new MyHolder(layout);   }    @Override   public void onBind(RecyclerView.ViewHolder viewHolder, int RealPosition, String data) {     if(viewHolder instanceof MyHolder) {       ((MyHolder) viewHolder).text.setText(data);     }   }    class MyHolder extends BaseRecyclerAdapter.Holder {     TextView text;     public MyHolder(View itemView) {       super(itemView);       text = (TextView) itemView.findViewById(R.id.text);     }   } }  

 然后在類(lèi)中調(diào)用,

public class MainActivity extends AppCompatActivity {    private RecyclerView mRecyclerView;   private RecyclerView.LayoutManager mLayoutManager;   private MyAdapter mAdapter;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      mRecyclerView = (RecyclerView) findViewById(R.id.list); //    mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);     mLayoutManager = new GridLayoutManager(this, 2); //    mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);     mRecyclerView.setLayoutManager(mLayoutManager);     mRecyclerView.setItemAnimator(new DefaultItemAnimator());     mRecyclerView.addItemDecoration(new GridItemDecoration(this, true));      mAdapter = new MyAdapter();     mRecyclerView.setAdapter(mAdapter);     mAdapter.addDatas(generateData());     setHeader(mRecyclerView);     mAdapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener<String>() {       @Override       public void onItemClick(int position, String data) {         Toast.makeText(MainActivity.this, position + "," + data, Toast.LENGTH_SHORT).show();       }     });   }    private void setHeader(RecyclerView view) {     View header = LayoutInflater.from(this).inflate(R.layout.header, view, false);          mAdapter.setHeaderView(header);   }    private ArrayList<String> generateData() {     ArrayList<String> data = new ArrayList<String>() {       {         for(int i=0;i<21;i++) add("數(shù)據(jù)" + i);       }     };     return data;   }    } 

 這樣就OK啦。 

布局文件:

R.layout.activity_main 

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   xmlns:tools="http://schemas.android.com/tools"   android:layout_width="match_parent"   android:layout_height="match_parent">    <android.support.v7.widget.RecyclerView     android:id="@+id/list"     android:layout_width="match_parent"     android:layout_height="match_parent" />  </LinearLayout> 

header.xml 

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:orientation="vertical">    <ImageView     android:layout_gravity="center_horizontal"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:src="@mipmap/ic_launcher"/>  </LinearLayout> 

   item.xml 

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:padding="20dp"   android:orientation="vertical">    <TextView     android:id="@+id/text"     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:layout_centerInParent="true"     android:text="數(shù)據(jù)"/>  </RelativeLayout> 

以上就是Android RecycleView添加head配置封裝的實(shí)例,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝阳县| 乐都县| 大化| 保靖县| 漳州市| 阿克陶县| 岳阳市| 阿城市| 邓州市| 嵩明县| 广河县| 唐山市| 长岭县| 台安县| 扎兰屯市| 全椒县| 北票市| 阿坝| 金阳县| 龙州县| 南乐县| 漠河县| 奇台县| 神农架林区| 诸暨市| 连山| 桂平市| 辽宁省| 庆阳市| 星子县| 武川县| 宝兴县| 建昌县| 连江县| 察隅县| 四子王旗| 和林格尔县| 鄱阳县| 阳泉市| 通州区| 隆尧县|