安卓 xRecycleView(添加头部和尾部)

xRecycleView(添加头部和尾部)

效果图

头部效果
在这里插入图片描述
尾部效果
在这里插入图片描述

Java代码

// An highlighted block
package bw.com.headerandfoodter;

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 java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    MyAdapter myAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        init();
        initData();
    }

    private void initData() {
        ArrayList<String> arrayList = new ArrayList<>();
        for (int i = 1;i<=10;i++){
            arrayList.add("第"+i+"个Item");
        }
        myAdapter.refershData(arrayList);
    }

    private void init() {

        recyclerView = findViewById(R.id.rv);
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);

        myAdapter = new MyAdapter();
        recyclerView.setAdapter(myAdapter);

        addHeadView();
        addfoodView();

    }

    private void addfoodView() {
        View view = View.inflate(this,R.layout.layout_header,null);
        myAdapter.addHeaderView(view);
        myAdapter.notifyDataSetChanged();
    }

    private void addHeadView() {
        View view = View.inflate(this,R.layout.layout_fooder,null);
        myAdapter.addFoodterView(view);
        myAdapter.notifyDataSetChanged();
    }
}

适配器代码

// An highlighted block
package bw.com.headerandfoodter;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<BaseHolder> {

    ArrayList<String> data = new ArrayList<>();
    View headerView;
    View foodterView;

    private final int HEADER_TYPE = 1;//头布局
    private final int NORMAL_TYPE = 2;//头布局
    private final int FOODER_TYPE = 3;//尾部局

    public void refershData(ArrayList<String> newList){
        data.clear();
        data.addAll(newList);
        notifyDataSetChanged();
    }

    public void addHeaderView(View headerView){
        this.headerView = headerView;
    }

    public void addFoodterView(View foodterView){
        this.foodterView = foodterView;
    }

    @NonNull
    @Override
    public BaseHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int type) {
        if (type == HEADER_TYPE){
            return new BaseHolder(headerView);
        }else if (type == FOODER_TYPE){
            return new BaseHolder(foodterView);
        }else {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_rv,viewGroup,false);
            return  new BaseHolder(view);
        }
    }

    @Override
    public void onBindViewHolder(@NonNull BaseHolder baseHolder, int i) {
        if (i == 0 && headerView != null){
            return;
        }else if (i == data.size()+1 && foodterView != null){
            return;
        }else {
            TextView textView = (TextView) baseHolder.getView(R.id.tv);
            if (headerView != null && i==HEADER_TYPE){
                textView.setText(data.get(i-1));
            }
            else {
                textView.setText(data.get(i-1));
            }
        }

    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0 && headerView!=null){
            return HEADER_TYPE;
        }else if (position == data.size()+1 && foodterView!=null){
            return FOODER_TYPE;
        }
        return NORMAL_TYPE;
    }

    @Override
    public int getItemCount() {
        int size = data.size();
        if (headerView!=null){
            size++;
        }
        if (foodterView!= null){
            size++;
        }
        return size;
    }
}

ViewHolder

// An highlighted block
package bw.com.headerandfoodter;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.View;

public class BaseHolder extends RecyclerView.ViewHolder {

    SparseArray<View> array = new SparseArray<>();

    public BaseHolder(@NonNull View itemView) {
        super(itemView);
    }

    public View getView(int id){
        View view = array.get(id);
        if (view == null){
            view = itemView.findViewById(id);
            array.put(id,view);
        }
        return view;
    }
}

主布局文件

// An highlighted block
<?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=".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>

头部布局文件

// An highlighted block
<?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">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/_104"
        />

</LinearLayout>

尾部布局文件

// An highlighted block
<?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">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="236dp"
        android:src="@drawable/_101"
        />

</LinearLayout>

适配器布局文件

// An highlighted block
<?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:padding="20dp"
    >


    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@color/colorAccent"
        android:gravity="center"
        />

</LinearLayout>

pull、SAX解析

效果图

在这里插入图片描述

XML文件

// An highlighted block
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>冰与火之歌</name>
        <author>乔治马丁</author>
        <year>2014</year>
        <price>89</price>
    </book>
    <book id="2">
        <name>安徒生童话</name>
        <author>安徒生</author>
        <year>2004</year>
        <price>77</price>
    </book>
</bookstore>

pull解析代码

// An highlighted block
package bw.com.day12;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.util.ArrayList;

import bw.com.day1.R;

public class PullActivity extends AppCompatActivity {
    private ArrayList<BookBean> bookBeans;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pull2);


        pull();

        for (int i = 0;i<bookBeans.size();i++){
            Log.e("###",bookBeans.get(i).toString());
        }

    }

    private void pull() {
        bookBeans = new ArrayList<>();

        try {
            //获得解析工厂
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            //解析器
            XmlPullParser pullParser = factory.newPullParser();
            //解析那个文件
            pullParser.setInput(getAssets().open("book.xml"),"UTF-8");
            //解析类型
            int type = pullParser.getEventType();
            BookBean bookBean = null;
                          //文档结束的常量
            while (type!=XmlPullParser.END_DOCUMENT){
                switch (type){
                    case XmlPullParser.START_TAG:
                        if (pullParser.getName().equals("book")){
                            bookBean = new BookBean();
                            String id = pullParser.getAttributeValue(0);
                            bookBean.setId(id);
                        }else if (pullParser.getName().equals("name")){
                            String name = pullParser.nextText();
                            bookBean.setName(name);
                        }else if (pullParser.getName().equals("author")){
                            bookBean.setAuthor(pullParser.nextText());
                        }else if (pullParser.getName().equals("year")){
                            bookBean.setYear(pullParser.nextText());
                        }else if (pullParser.getName().equals("price")){
                            bookBean.setPrice(pullParser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if (pullParser.getName().equals("book")){
                            bookBeans.add(bookBean);
                        }
                        break;
                }
                type = pullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

SAX解析

// An highlighted block
package bw.com.day12;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import bw.com.day1.R;

public class SAXActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sax2);

        try {
            ArrayList<BookBean> bookBeans = new Sax().SaxList(getAssets().open("book.xml"));
            for (int i = 0;i<bookBeans.size();i++){
                Log.e("###",bookBeans.get(i).toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public class Sax{
      ArrayList<BookBean> bookBeans = new ArrayList<>();

      public ArrayList<BookBean> SaxList(InputStream is){

          SAXParserFactory factory = SAXParserFactory.newInstance();
          try {
              SAXParser saxParser = factory.newSAXParser();

              saxParser.parse(is,new SaxHelp());

          } catch (Exception e) {
              e.printStackTrace();
          }

          return  bookBeans;
      }

      class SaxHelp extends DefaultHandler{
          String str;
          BookBean bookBean;

          @Override
          public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
              super.startElement(uri, localName, qName, attributes);
              if (qName.equals("book")){
                  bookBean = new BookBean();
                  bookBean.setId(attributes.getValue("id"));
              }
          }

          @Override
          public void characters(char[] ch, int start, int length) throws SAXException {
              super.characters(ch, start, length);
              str = new String(ch,start,length);
          }

          @Override
          public void endElement(String uri, String localName, String qName) throws SAXException {
              super.endElement(uri, localName, qName);
              if (qName.equals("name")){
                  bookBean.setName(str);
              }else if (qName.equals("author")){
                  bookBean.setAuthor(str);
              }else if (qName.equals("year")){
                  bookBean.setYear(str);
              }else if (qName.equals("price")){
                  bookBean.setPrice(str);
              }else if (qName.equals("book")){
                  bookBeans.add(bookBean);
              }
          }
      }

    }
}

Bean类

// An highlighted block
package bw.com.day12;

public class BookBean {
    private String id;
    private String name;
    private String author;
    private String price;
    private String year;


    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    public String getPrice() {
        return price;
    }

    public String getYear() {
        return year;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public void setYear(String year) {
        this.year = year;
    }

    @Override
    public String toString() {
        return "BookBean{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price='" + price + '\'' +
                ", year='" + year + '\'' +
                '}';
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值