• Android-ListView-(BaseAdapter初步)


    在Android中就提供了专门列表显示条目的控件,ListView控件,ListView控件不是一次性加载全部数据,他是只加载用户在屏幕看得到的数据,当用户滑动的过程中在去加载新的数据,同时会自动销毁之前加载过的数据

    什么时候使用ListView ?

    答:当很多条目Item,显示都内容不同,数据不同,但是存放的位置是相似的,并且动态变化的条目Item(和数据),就可以用ListView

    ListView的使用:

    1.在布局中定义ListVIew

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <!-- 定义ListView -->
        <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </ListView>
    
    </RelativeLayout>

    2.在Java代码中找到ListVIew,再设置适配器 setAdapter(ListAdapter的子类)


    为何有BaseAdapter的出现 ?

    答:无论是ArrayAdapter还是SimpleAdapter,都是都不够灵活,所以Android提供了BaseAdapter适配器,BaseAdapter可以自定义适配器。

    BaseAdapter是 ArrayAdapter 和 SimpleAdapter 的父类,所以可以理解为:ArrayAdapter 和 SimpleAdapter 都去继承了BaseAdapter后进行了封装

     ListView+BaseAdapter代码:

    package liudeli.ui.all;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    
    public class ListViewActivity2 extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_listview2);
    
            ListView listView = findViewById(R.id.listview);
    
            ListAdapter listAdapter = new MyBaseAdapter();
            listView.setAdapter(listAdapter);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    }

    自定义BaseAdapter:

    package liudeli.ui.all;
    
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    
    public class MyBaseAdapter extends BaseAdapter {
    
        private final String TAG = MyBaseAdapter.class.getSimpleName();
    
        /**
         * 此方法是返回 Item条目都总数,此方法非常重要
         * @return
         */
        @Override
        public int getCount() {
            return 10;
        }
    
        @Override
        public Object getItem(int position) {
            return null;
        }
    
        @Override
        public long getItemId(int position) {
            return 0;
        }
    
        /**
         * 此方法是返回 每一个条目Item的View,有十个条目Item就会执行此方法十次,此方法非常重要
         * @param position
         * @param convertView
         * @param parent
         * @return
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Log.d(TAG, "调用了一次 getView  position:" + position);
            return null;
        }
    }

    看显示的结果,就明白为什么说,getCount();  getView() 方法重要了

     

    BaseAdapter 内部的实现:首先是要得到getCount(); 条目Item的总数,然后在去调用getView() 把getView 得到的View 绑定给条目Item加载等操作

  • 相关阅读:
    反爬虫破解系列-汽车之家利用css样式替换文字破解方法
    保留注释换行的python模块configparser
    python logging 实现的进程安全的文件回滚日志类
    我要自学网视频免登陆观看破解技巧
    修改mac host文件绑定域名
    Position属性四个值:static、fixed、absolute和relative的区别和用法
    vue项目通过webpack打包生成的dist文件放到express环境里运行(vue+webpack+express)
    npm ERR! mathine_call@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.js` npm ERR! Exit status 1
    Do not use built-in or reserved HTML elements as component id: header
    vue 项目 使用sass
  • 原文地址:https://www.cnblogs.com/android-deli/p/10096932.html
Copyright © 2020-2023  润新知