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 + '\'' +
'}';
}
}