Android 讲解:ListView
来源:互联网 发布:新歌2016网络吐槽红歌 编辑:程序博客网 时间:2024/06/01 18:56
ListView 在Android 很是常用。但是也是比较难的一个。
简单的ListView
一个简单的ListView 由一个layout,和显示数据。
创建layout
main_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
添加 item
adapter
对象为显示数据的格式对象。 R.layout.simple_list_item_1
系统的显示布局 obj
显示的数据
MainActivity.java
package cn.met0.android.chapter2.activity;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends Activity { String[] obj = {"aaaa","bbb","ccc","ddd","eee","fff","ggg","aaaa","bbb","ccc","ddd","eee","fff","ggg"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,obj); ListView view = (ListView) findViewById(R.id.list_view); view.setAdapter(adapter); }}
使用自定义布局
系统布局太单一怎么办?Android 里面可以使用自己的布局创建ListView。
- 创建ViewList 布局(省略)
- 创建自己的布局
- 创建自己的实体类
- 创建自己的Adapter
- 显示数据
创建自己布局
是不是很复杂?其实这就是个类似于QQ好友列表的布局,一个头像,一个昵称,一个签名。
friends_layout.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="wrap_content" > <!-- <ImageView android:id="@+id/head_portrait" android:layout_width="match_parent" android:layout_height="match_parent" /> --> <ImageView android:id="@+id/user_head_portrait" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/user_name" android:layout_width="match_parent" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="小明" /> <TextView android:id="@+id/user_info" android:layout_width="match_parent" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceSmall" android:text="明天要去打篮球" /> </LinearLayout> </LinearLayout>
创建自己的实体类
这个就很简单啦。不多说。 User.java
package cn.met0.android.chapter2.entity;public class User { private int headPortrait; private String name; private String info; public User(int headPortrait, String name, String info) { this.headPortrait = headPortrait; this.name = name; this.info = info; } public int getHeadPortrait() { return headPortrait; } public String getName() { return name; } public String getInfo() { return info; }}
创建自己的Adapter
public UserAdapter(Context context, int textViewResourceId,
实现父类的构造函数,执行父类的构造方法。resourceId 在getView能用到
User[] objects)
public View getView(int position, View convertView, ViewGroup parent)
在加载Item 的时候会执行,执行的返回值就是现实的View。
User user = getItem(position)
获取一个要加载的数据 LayoutInflater.from(getContext()).inflate(resourceId,null)
获取一个Item View userItemView.findViewById(*)
获取视图的控件 userName.set*
设置现实的内容
UserAdapter.java
package cn.met0.android.chapter2.Adapter;import cn.met0.android.chapter2.activity.R;import cn.met0.android.chapter2.entity.User;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class UserAdapter extends ArrayAdapter<User> { private int resourceId; public UserAdapter(Context context, int textViewResourceId, User[] objects) { super(context, textViewResourceId, objects); resourceId = textViewResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { //获取一个user 对象 User user = getItem(position); //获取一个item View View userItemView = LayoutInflater.from(getContext()).inflate(resourceId,null); //通过item View 获取自定义item 的控件 ImageView userHeadPortrait = (ImageView) userItemView.findViewById(R.id.user_head_portrait); TextView userName = (TextView) userItemView.findViewById(R.id.user_name); TextView userInfo = (TextView) userItemView.findViewById(R.id.user_info); //设置控件值 userHeadPortrait.setImageResource(user.getHeadPortrait()); userName.setText(user.getName()); userInfo.setText(user.getInfo()); return userItemView; }}
显示数据
MainActivity.java
package cn.met0.android.chapter2.activity;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import cn.met0.android.chapter2.Adapter.UserAdapter;import cn.met0.android.chapter2.entity.User;public class MainActivity extends Activity { User[] users = { new User(R.drawable.ic_launcher, "东哥", "今天天气好好哟~!"), new User(R.drawable.ic_launcher, "东哥", "今天天气好好哟~!"), new User(R.drawable.ic_launcher, "东哥", "今天天气好好哟~!"), new User(R.drawable.ic_launcher, "东哥", "今天天气好好哟~!"), new User(R.drawable.ic_launcher, "东哥", "今天天气好好哟~!"), new User(R.drawable.ic_launcher, "东哥", "今天天气好好哟~!"), }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); UserAdapter adapter = new UserAdapter(this, R.layout.friends_layout,users ); ListView view = (ListView) findViewById(R.id.list_view); view.setAdapter(adapter); }}
优化ListView
ListView 优化主要在Adapter 里面优化,在getView 方法里面。
if(convertView == null)
convertView 会把Item 使用缓存下来。解决每次获取Item 视图,和布局的控件。
UserAdapter.java
public class UserAdapter extends ArrayAdapter<User> { private int resourceId; @Override public View getView(int position, View convertView, ViewGroup parent) { //获取一个user 对象 User user = getItem(position); //获取一个item View View userItemView = null; ViewHolder viewHolder = null; if(convertView == null){ userItemView = LayoutInflater.from(getContext()).inflate(resourceId,null); viewHolder = new ViewHolder(); viewHolder.userHeadPortrait = (ImageView) userItemView.findViewById(R.id.user_head_portrait); viewHolder.userName = (TextView) userItemView.findViewById(R.id.user_name); viewHolder.userInfo = (TextView) userItemView.findViewById(R.id.user_info); userItemView.setTag(viewHolder); }else{ userItemView = convertView; viewHolder = (ViewHolder) convertView.getTag(); } //设置控件值 userHeadPortrait.setImageResource(user.getHeadPortrait()); userName.setText(user.getName()); userInfo.setText(user.getInfo()); return userItemView; } class ViewHolder{ ImageView userHeadPortrait; TextView userName; TextView userInfo; }}
- android listview讲解
- Android 讲解:ListView
- Android ListView性能优化实例讲解
- ListView讲解
- ListView讲解
- ListView讲解
- 提高android应用的效率--主要讲解listview的优化
- 由浅入深讲解android开发中listview的性能优化
- 提高android应用的效率--主要讲解listview的优化
- 提高android应用的效率--主要讲解listview的优化
- 提高android应用的效率--主要讲解listview的优化
- Android基础控件之ListView详细使用讲解
- android中填充类似listview的适配器内部讲解
- ListView的实例讲解
- ListView的setViewBinder讲解
- ListView使用完全讲解
- Listview类讲解 以及adapter类讲解
- 【listview精深系列2】listview基础讲解
- Contacts(简介)
- JQuery总结:选择器归纳、DOM遍历和事件处理、DOM完全操作和动画
- tomcat 启动一段时间后 出问题。 无错误日志,页面卡住
- C++11: Dynamic Memory
- 使用Java为图片添加水印
- Android 讲解:ListView
- linux驱动_最简单的例子
- NSOperation
- Android 好的源码依赖包 收集
- JAR export finished with warnings. See details for additional information
- 图像处理 UIGraphicsBeginImageContext
- 数据解析的时间给model赋字典的值
- 【NOIP2015day1T2】【codevs4511】信息传递,最小环
- 1