ListView

1.基础

listview一般都是撑满屏幕match_parent
页面一定要在AndroidManifest中进行注册
Adapter
setAdapter进行listview和adapter绑定

1.修改AndroidManifest.xml注册ListViewDemoActivity类<?xml version="1.0" encoding="utf-8"?>package="com.geekband.Test01"    xmlns:android="http://schemas.android.com/apk/res/android"    android:versionName="1.0.0">    "true"        android:icon="@mipmap/geekband"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        ".SplashActivity">                            "android.intent.action.MAIN"/>                "android.intent.category.LAUNCHER"/>                            ".MainActivity"            android:icon="@drawable/abc_ic_ab_back_mtrl_am_alpha">                ".ListViewDemoActivity"            android:icon="@drawable/abc_ic_ab_back_mtrl_am_alpha">            2.创建PhoneBookAdapter,为页面类提供数据来源public class PhoneBookAdapter extends BaseAdapter {    private Context mContext;    private LayoutInflater mLayoutInflater;    private String[] mNames = {"小明", "小花"};    public PhoneBookAdapter(Context context) {         mContext = context;         mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    }    @Override    public int getCount() {        // 有多少条数据        return mNames.length;    }    @Override    public Object getItem(int position) {        // 返回某一条数据对象        return mNames[position];    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        // 返回一个视图         convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);        TextView nameTextView = (TextView) convertView.findViewById(R.id.name_text_view);        nameTextView.setText(mNames[position]);        return convertView;    }}3.创建页面布局activity_listview_demo.xml<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    "wrap_content"        android:layout_height="wrap_content"        android:text="@string/phone_book"/>    "@+id/list_view"        android:layout_width="match_parent"        android:layout_height="match_parent">    4.创建页面类,页面类中使用ListView并绑定前面创建的Adapterpublic class ListViewDemoActivity extends Activity {    private ListView mPhoneBookListView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_listview_demo);        mPhoneBookListView = (ListView) findViewById(R.id.list_view);        PhoneBookAdapter phoneBookAdapter = new PhoneBookAdapter(ListViewDemoActivity.this);        mPhoneBookListView.setAdapter(phoneBookAdapter);    }}5.创建item_phone_book_friend.xml<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    "@+id/name_text_view"        android:layout_width="fill_parent"        android:layout_height="wrap_content"/>

关键元素
1.修改AndroidManifest.xml文件,注册Activity类
2.创建Adapter类,为页面类提供数据来源
3.创建布局文件
4.创建Activity类,按照生命周期写7大方法,其中在onCreate()方法中至少要完成绑定布局的工作;另外为ListView控件绑定Adapter
5.创建子视图布局item_phone_book_friend.xml
6.Adapter类中通过重写getView()方法来将子视图添加到ListView内,

LayoutInflater mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);

7.Adapter类中通过重写getCount()方法确定在ListView中显示多少个子视图。

2.进阶

为listview整体或者具体项目绑定点击或者长按事件
更新listview中数据,修改adapter中数据;调用notifyDataSetChanged()方法

3.优化

public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if (convertView == null) {            convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);            viewHolder = new ViewHolder();            // 获取控件            viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.name_text_view);            viewHolder.ageTextView = (TextView) convertView.findViewById(R.id.age_text_view);            viewHolder.avatarImageView = (ImageView) convertView.findViewById(R.id.avatar_image_view);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        // 和数据之间进行绑定        viewHolder.nameTextView.setText(mUserInfos.get(position).getUserName());        viewHolder.ageTextView.setText(String.valueOf(mUserInfos.get(position).getAge()));        viewHolder.avatarImageView.setImageResource(R.drawable.ic_launcher);        return convertView;    }    class ViewHolder {        TextView nameTextView;        TextView ageTextView;        ImageView avatarImageView;    }
  1. 只加载一次子视图即mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);只执行一次
  2. 由于每次看到页面都要执行getView,因此需要缓存子视图中的控件,以免重复findViewByID

更多相关文章

  1. 安全新手入坑——HTML标签
  2. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  3. Android(安卓)Service之bindService()
  4. Android(安卓)Studio 改变app启动页面
  5. Android(安卓)复习_Service 一
  6. Android(安卓)- fragment之间数据传递
  7. Unity3d调用Anroid(Android(安卓)Studio环境)方法
  8. Android(安卓)ViewModel 的作用
  9. 第十三天 乐在其中-Android与远端之JSON

随机推荐

  1. Android(安卓)M 新的运行时权限开发者需
  2. Android教父高焕堂:开源只是手段,开放才是
  3. [android与open source不得不说的事]Andr
  4. 如何发布你的Android应用程序
  5. Oracle vs. Google 訴訟最新發展,Sun CEO
  6. 使用android快速开发框架afinal 开发andr
  7. Android中的实体类的正确用法
  8. Android进阶知识树——Android系统的启动
  9. Android设计模式-原型模式
  10. Android(安卓)进程和线程模型