RecyclerView的多条目加载,添加头布局
来源:互联网 发布:网络通信安全员证书 编辑:程序博客网 时间:2024/05/31 04:03
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>
- RecyclerView的多条目加载,添加头布局
- Recyclerview布局多条目加载+上下拉
- recyclerView多条目布局
- RecyclerView添加头布局
- Recyclerview添加头布局
- RecyclerView头布局添加
- RecyclerView添加头布局
- RecyclerView添加头条目显示空白的解决方案
- RecyclerView多条目加载
- RecyclerView多条目加载
- RecyclerView 多条目加载
- RecyclerView多条目加载
- recyclerview多条目加载
- Recyclerview多条目加载
- Recyclerview多条目加载
- RecyclerView的多条目加载适配器
- OkHttp的网络请求数据和RecyclerView的多条目加载,添加分割线
- OkHttp的网络请求数据和RecyclerView的多条目加载,添加分割线
- 2017.10.7离线赛总结
- 手机网上商城-项目经验总结(四)-BaseServlet类
- 设计模式之享元模式(1)
- centos6.5安装mysql
- 欢迎使用Markdown编辑器写博客
- RecyclerView的多条目加载,添加头布局
- JavaScript设计模式
- 手机网上商城-项目经验总结(五)-添加商品
- 求1+2+3+...+njava实现
- try-catch-finally
- 手机网上商城-项目经验总结(六)-更新商品
- 【bzoj2318】Spoj4060 game with probability Problem
- 能整除1400的数目是__?面试题
- postgresql使用的一些笔记