Android第二周(第二部分)-listview
来源:互联网 发布:智汇诚网络 编辑:程序博客网 时间:2024/05/02 00:42
ListView
1.基础
listview一般都是撑满屏幕match_parent
页面一定要在AndroidManifest中进行注册
Adapter
setAdapter进行listview和adapter绑定
1.修改AndroidManifest.xml注册ListViewDemoActivity类<?xml version="1.0" encoding="utf-8"?><manifest package="com.geekband.Test01" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0.0"> <application android:allowBackup="true" android:icon="@mipmap/geekband" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".SplashActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name=".MainActivity" android:icon="@drawable/abc_ic_ab_back_mtrl_am_alpha"> </activity> <activity android:name=".ListViewDemoActivity" android:icon="@drawable/abc_ic_ab_back_mtrl_am_alpha"> </activity> </application></manifest>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"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/phone_book"/> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView></LinearLayout>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"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/name_text_view" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout>
关键元素
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; }
- 只加载一次子视图即mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);只执行一次
- 由于每次看到页面都要执行getView,因此需要缓存子视图中的控件,以免重复findViewByID
0 0
- Android第二周(第二部分)-listview
- Android第二周(第一部分)-页面布局
- Android第二周(第三部分)-GridView和ScrollView
- android 第二部分
- geekband android #5 第二周分享(布局、ListView)
- ListView.OnScrollListener监听listview滚到最底部,实现分页加载(本文第一部分转载,第二部分原创)
- GeekBand第二周 ListView(上)
- Java 多线程-第二部分
- Assembly学习心得(第二部分)
- Assembly学习心得(第二部分)
- FreeType2 教程(第二部分)
- FreeType2 教程(第二部分)
- chapter 3(第二部分)
- (转)Android深入浅出之Audio 第二部分 AudioFlinger分析
- 深入理解Android之Java Security第二部分(Final)
- 深入理解Android之Java Security第二部分(Final)
- 深入理解Android之Java Security(第二部分,最后)
- Android第一周(第二部分)-Intent和Activity生命周期
- AOJ 0558 BFS
- Codevs 4600 [NOI2015]程序自动分析
- Hygieia 部署指南(1)介绍篇
- 除法
- javascript中eval解析JSON字符串
- Android第二周(第二部分)-listview
- 关于静态变量,成员变量,静态方法,实例方法的用法及区别
- 递归算法
- ubuntu下code blocks安装全过程
- Mybatis的一对多,多对一以及延迟加载
- Java中JVM的内存区域划分
- 查找链表的中间节点
- 敏捷开发之PO
- Android按钮单击事件的四种常用写法总结