當前位置:
首頁 >
简易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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用opencv-python读取web
- 下一篇: 51nod1347(简单逻辑)