RecyclerView的多条目加载,添加头布局
要导入recyclerview依赖
package com.example.day1recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
MainActivity
public class MainActivity extends AppCompatActivity {
RecyclerView rv;
List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv = (RecyclerView) findViewById(R.id.rv);
initRV();
}
public void initRV(){
//1初始化数据
initData();
//2创建一个布局管理器
LinearLayoutManager manager = new LinearLayoutManager(this);
rv.setLayoutManager(manager);
//3创建一个适配器
// MyRVAdapter adapter = new MyRVAdapter();
MyRVAdapter1 adapter = new MyRVAdapter1();
TextView tv = new TextView(this);
tv.setText("toubu");
TextView tv1 = new TextView(this);
tv1.setText("toubu1");
adapter.addHeader(tv);
adapter.addHeader(tv1);
//4关联 绑定
rv.setAdapter(adapter);
}
//模拟数据
private void initData() {
list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add("position" + i);
}
}
class MyRVAdapter extends RecyclerView.Adapter<MyRVAdapter.MyViewHolder>{
//用来创建Holder实例的方法
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//接受的View类型对象 就是item布局转化成的View对象
View view = View.inflate(MainActivity.this, R.layout.recycler_item, null);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
//
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText(list.get(position));
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
//该够造方法接受的itemView参数 就是item布局的view对象
public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
}
/**
* 实现recyclerView的头布局
* 在adapter中维护一个list《view》集合 全都是header样式
* header布局文件 只有一个根布局
* 每次调用addHeader方法时候 list结合中添加一个view对象
* 然后根据getItemType方法 如果position小于 头view的 list集合的长度 都使用头布局类型
*/
class MyRVAdapter1 extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
public static final int TYPE_HEADER = 0;
public static final int TYPE_ONE = 1;
public static final int TYPE_TWO = 2;
List<View> listHeader = new ArrayList<>();
public void addHeader(View view){
listHeader.add(view);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == TYPE_HEADER){
View view = View.inflate(MainActivity.this, R.layout.recycler_header, null);
MyHeaderHolder holderH = new MyHeaderHolder(view);
return holderH;
}else if(viewType == TYPE_ONE){
View view = View.inflate(MainActivity.this, R.layout.recycler_item, null);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}else{
View view1 = View.inflate(MainActivity.this, R.layout.recycler_item1, null);
MyViewHolder1 holder1 = new MyViewHolder1(view1);
return holder1;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof MyHeaderHolder){
((MyHeaderHolder) holder).ll.addView(listHeader.get(position));
}
if(holder instanceof MyViewHolder){
((MyViewHolder) holder).tv.setText(list.get(position));
}
if(holder instanceof MyViewHolder1){
((MyViewHolder1) holder).tv.setText(list.get(position));
}
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
@Override
public int getItemViewType(int position) {
if(position < listHeader.size()){
return TYPE_HEADER;
}else if(position % 2 == 0){
return TYPE_ONE;
}else {
return TYPE_TWO;
}
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
//该够造方法接受的itemView参数 就是item布局的view对象
public MyViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
}
}
class MyHeaderHolder extends RecyclerView.ViewHolder{
LinearLayout ll;
//该够造方法接受的itemView参数 就是item布局的view对象
public MyHeaderHolder(View itemView) {
super(itemView);
ll = (LinearLayout) itemView.findViewById(R.id.ll);
}
}
class MyViewHolder1 extends RecyclerView.ViewHolder{
TextView tv;
ImageView iv;
//该够造方法接受的itemView参数 就是item布局的view对象
public MyViewHolder1(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.tv);
iv = (ImageView) itemView.findViewById(R.id.iv);
}
}
}
}
Layoyt布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
Header头布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/ll"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">
</LinearLayout>
item条目布局
item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">
<TextView
android:padding="10dp"
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
item1
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.example.day1recyclerview.MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
/>
<TextView
android:layout_below="@+id/iv"
android:padding="10dp"
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>