Andriod studio 學習 之 萬能適配器

效果圖

在這裏插入圖片描述

代碼

封裝類

package com.example.day007.base;

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

import com.example.day007.R;

public class Baseholder extends RecyclerView.ViewHolder {
    //用來存行佈局中的控件
    SparseArray<View> array=new SparseArray<>();//效率高的集合


    public Baseholder(@NonNull View itemView) {
        super(itemView);

    }

    //從容器中取控件
    public View getView(int id){

        View v = null;
        v=array.get(id);//從集合中根據id取控件
        if (v==null){//容器中沒有這個控件
            v = itemView.findViewById(id);
            array.put(id,v);
        }
        return v;
    }
}

適配器類

package com.example.day007.base;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;

public abstract class Baseadpater<T> extends RecyclerView.Adapter<Baseholder> {

    private Context context;//上下文對象
    private ArrayList<T> data;//這個是數據源

    public Baseadpater(Context context, ArrayList<T> data) {
        this.context = context;
        this.data = data;
    }

    public abstract int getlayoutid();//必須讓子類重寫,重寫的時候給我一個具體佈局的id item_layout.xml


    @NonNull
    @Override
    public Baseholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(context).inflate(getlayoutid(),null);
        return new Baseholder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull Baseholder baseholder, int i) {
        bangding(baseholder,i);
    }
    public abstract void bangding(Baseholder baseholder, int i);

    @Override
    public int getItemCount() {
        return data.size();
    }
}

繼承適配器的適配器

package com.example.day007.base;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.day007.R;

import java.util.ArrayList;

public class Firstadpater extends Baseadpater<Integer>{
    private Context context;
    private ArrayList<Integer> strings;
    private ArrayList<String> strings2;

    public Firstadpater(Context context, ArrayList<Integer> data,ArrayList<String> strings2) {
        super(context, data);
        this.context = context;
        this.strings = data;
        this.strings2=strings2;
    }


    @Override
    public int getlayoutid() {
        return R.layout.item_layout;
    }

    @Override
    public void bangding(Baseholder baseholder, int i) {
        //找到控件 //賦值
        ImageView imageView= (ImageView) baseholder.getView(R.id.text);//類型轉換
        imageView.setImageResource(strings.get(i));

        TextView textView= (TextView) baseholder.getView(R.id.img);
        textView.setText(strings2.get(i));
    }
}

行佈局

<?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:id="@+id/text"
        />
    <TextView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

activity佈局

<?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=".base.Main2Activity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

activity代碼

package com.example.day007.base;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.LinearLayout;

import com.example.day007.MainActivity;
import com.example.day007.R;

import java.util.ArrayList;
import java.util.List;

public class Main2Activity extends AppCompatActivity {
    private RecyclerView recycle;

    private ArrayList<Integer> list = new ArrayList<>();
    private ArrayList<String> list2 = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        recycle = (RecyclerView) findViewById(R.id.recycle);

        list.add(R.mipmap.a);
        list.add(R.mipmap.b);
        list.add(R.mipmap.c);
        list.add(R.mipmap.d);

        list2.add("智慧");
        list2.add("智慧");
        list2.add("智慧");
        list2.add("智慧");

        Firstadpater firstadpater = new Firstadpater(this,list,list2);
        LinearLayoutManager manager=new LinearLayoutManager(this);
        recycle.setLayoutManager(manager);
        recycle.setAdapter(firstadpater);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章