日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

简易listview与adapter实现列表,ArrayAdapter和BaseAdapter

發布時間:2023/12/10 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简易listview与adapter实现列表,ArrayAdapter和BaseAdapter 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

item.xml

<?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="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="48dp"android:gravity="center"android:text="萬能適配器測試"android:textSize="18sp" /> </LinearLayout>

listview加載數據

private void commonAdapterTest() {ListView listView = (ListView) findViewById(R.id.listview);List<String> datas = new ArrayList<>();for (int i = 0; i < 18; i++) {datas.add("萬能適配器測試" + i);}listView.setAdapter(new CommonAdapter<String>(this, datas, R.layout.item) {@Overrideprotected void convertView(View item, String s) {TextView textView = CommonViewHolder.get(item, R.id.textView);textView.setText(s);}}); }

?

兩個工具類優化listview

?

public abstract class CommonAdapter<T> extends BaseAdapter {private Context context;private List<T> datas;private int layoutId;public CommonAdapter(Context context, List<T> datas, int layoutId) {this.context = context;this.datas = datas;this.layoutId = layoutId;}@Overridepublic int getCount() {return datas == null ? 0 : datas.size();}@Overridepublic T getItem(int position) {return datas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {Log.d("listview", "---------LayoutInflater()-----------" + position);convertView = LayoutInflater.from(context).inflate(layoutId, null);}else{} // Log.d("listview", "---------getView()-----------" + position);T t = getItem(position);convertView(convertView, t);return convertView;}/*** 局部更新數據,調用一次getView()方法;Google推薦的做法** @param listView 要更新的listview* @param position 要更新的位置*/public void notifyDataSetChanged(ListView listView, int position) {/**第一個可見的位置**/int firstVisiblePosition = listView.getFirstVisiblePosition();/**最后一個可見的位置**/int lastVisiblePosition = listView.getLastVisiblePosition();/**在看見范圍內才更新,不可見的滑動后自動會調用getView方法更新**/if (position >= firstVisiblePosition && position <= lastVisiblePosition) {/**獲取指定位置view對象**/View view = listView.getChildAt(position - firstVisiblePosition);getView(position, view, listView);}}/*** 需要去實現的對item中的view的設置操作** @param item* @param t*/protected abstract void convertView(View item, T t);}

2222222222222222222222222222

public class CommonViewHolder {/*** @param view 所有緩存View的根View* @param id 緩存View的唯一標識* @return*/public static <T extends View> T get(View view, int id) {SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();//如果根view沒有用來緩存View的集合if (viewHolder == null) {viewHolder = new SparseArray<View>();view.setTag(viewHolder);//創建集合和根View關聯}View chidlView = viewHolder.get(id);//獲取根View儲存在集合中的孩紙if (chidlView == null) {//如果沒有改孩紙//找到該孩紙chidlView = view.findViewById(id);viewHolder.put(id, chidlView);//保存到集合}return (T) chidlView;} }

?2、BaseAdapter使用

public class SampleAdapter extends BaseAdapter {private List<AreaEntity> mDataSet;private Context context;public SampleAdapter(Context context, List<AreaEntity> dataSet) {this.mDataSet = dataSet;this.context = context;}@Overridepublic int getCount() {return mDataSet.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}// 刪除 打勾 全選public void cleckAll(int is_checked) { //全選 刪除多少那里要刪除全部for (int a = 0; a < mDataSet.size(); a++) {if (is_checked == a) {mDataSet.get(a).setIfsecect(true);} else {mDataSet.get(a).setIfsecect(false);}}notifyDataSetChanged();}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {convertView = View.inflate(context, R.layout.item_popup_car, null);TextView textView = (TextView) convertView.findViewById(R.id.text);textView.setText(mDataSet.get(position).getName());if (position == 1) {textView.setTextColor(context.getResources().getColor(R.color.derder));}if (mDataSet.get(position).isIfsecect()) {textView.setBackgroundColor(context.getResources().getColor(R.color.topbgokc));} else {textView.setBackgroundColor(context.getResources().getColor(R.color.xianlanbgc));}return convertView;}}

3、ArrayAdapter使用

item_view

<?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:orientation="vertical"><TextViewandroid:id="@+id/tv_items"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="20dp"android:textSize="25sp"/></LinearLayout>

實現

private String[] mTitle = new String[]{"開啟藍牙", "關閉藍牙", "設備列表", "接收數據", "已配對設備"}; mList.setAdapter(new ArrayAdapter<>(this, R.layout.item_list, R.id.tv_items, mTitle));

?

總結

以上是生活随笔為你收集整理的简易listview与adapter实现列表,ArrayAdapter和BaseAdapter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。