Android ListView筆記 封裝

MainActivity中

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private String[] data;
    private List<DataList> lsobj;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        data =getData();
        lsobj=getDataList();
        listView = findViewById(R.id.listview);
        //使用方法
        AdpterFrame af = new AdpterFrame<DataList,Items>(this, lsobj, new AdpterCallBack() {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = null;
                Items items=null;
                if(convertView == null){
                    view = View.inflate(MainActivity.this, R.layout.listviewitem, null);
                    items=new Items();
                    items.txt_nickname = view.findViewById(R.id.item);
                    view.setTag(items);
                }else{
                    view = convertView;
                    items= (Items) view.getTag();
                }
                items.txt_nickname.setText(lsobj.get(position).name);
                return view;
            }
            @Override
            public View getViewFrame(int position, View convertView, ViewGroup parent, Object o) {
                return null;
            }
            @Override
            public Void initItemView(Object o) {
                return null;
            }
        });
        //listView.setAdapter(new Myadpter(this,data));
        listView.setAdapter(af);
    }
    private String[] getData() {
        return new String[] { "張三", "李四", "王五", "陸六" };
    }
    List<DataList> getDataList(){
        List<DataList> ls = new ArrayList<DataList>();
        DataList dataList = new DataList("測試1");
        ls.add(dataList);
         dataList = new DataList("測試2");
        ls.add(dataList);
         dataList = new DataList("測試3");
        ls.add(dataList);
         dataList = new DataList("測試4");
        ls.add(dataList);
        return ls;
    }
    class Items{
        public ImageView iv_avatar;
        public TextView txt_nickname;
        public TextView txt_description;
    }
    class DataList {
        String name;
        DataList(String str){
            this.name = str;
        }
    }
}

AdpterFrame代碼


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.List;

public class AdpterFrame<T,V> extends BaseAdapter {
    private Context mContext;
    private String[] data = null;//數組數據 使用泛型 定義
    private List<T> mData = null;//傳遞進來的集合數據
    AdpterCallBack adpterCallBack;//getView 回調函數
    public AdpterFrame(Context context,String[] strings,AdpterCallBack adpterCallBack){
        this.mContext = context;
        this.data = strings;
        this.adpterCallBack = adpterCallBack;
    }
    public AdpterFrame(Context context,List list,AdpterCallBack adpterCallBack){
        this.mContext = context;
        this.mData = list;
        this.adpterCallBack = adpterCallBack;
    }
    @Override//傳遞進來的是數組 就返回數組/list就返回list
    public int getCount() {
        if(data!=null){
            return data.length;
        }else{
            return mData.size();
        }
    }
    @Override
    public Object getItem(int position) {
        if(data!=null){
            return data[position];
        }else{
            return mData.get(position);
        }
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view =this.adpterCallBack.getView(position,convertView,parent);
   
        return view;
    }
}
interface AdpterCallBack<S>{
    View getView(int position, View convertView, ViewGroup parent);//相當去Adapter中的getView,所有的操作自己寫
    View getViewFrame(int position, View convertView, ViewGroup parent,S s);//這種是 調用默認模式
    Void initItemView(S s);//初始化ItemView
}

Demo下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章