listView学习记录
2016-04-17 12:22
435 查看
listView常用属性值:
xml文件属性:
android:scrollbars=”none” 隐藏listView滚动条
android:listSelector=”@android:color/transparent” 设置透明色以取消item点击效果
代码中设置
listView.setSelection(15); 指定显示第15个item
listView.getFirstVisiblePosition();获取当前可视区域第一个item的id(包含不完整的item)
listView.getLastVisiblePosition();获取当前可视区域最后一个item的id(包含不完整的item)
listView.setEmptyView(tv);listView设置空数据(空数据时显示,有数据则不显示)
示例布局
代码中使用 :
chat_item_other.XML
bean类
Activity
xml文件属性:
android:divider="@null", 取消(设置)分割线 android:dividerHeight="10dp",分割线高度
android:scrollbars=”none” 隐藏listView滚动条
android:listSelector=”@android:color/transparent” 设置透明色以取消item点击效果
代码中设置
listView.setSelection(15); 指定显示第15个item
listView.getFirstVisiblePosition();获取当前可视区域第一个item的id(包含不完整的item)
listView.getLastVisiblePosition();获取当前可视区域最后一个item的id(包含不完整的item)
listView.setEmptyView(tv);listView设置空数据(空数据时显示,有数据则不显示)
示例布局
<FrameLayout 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" tools:context="com.learn.listviewtest.MainActivity"> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ListView is empty" android:textSize="24sp" android:layout_gravity="center"/> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:divider="@color/colorAccent" android:dividerHeight="5dp" android:scrollbars="none" android:listSelector="@android:color/transparent" ></ListView> </FrameLayout>
代码中使用 :
tv = (TextView) findViewById(R.id.tv1); listView.setEmptyView(tv);
1.使用ViewHolder提高效率
简单示例public class MyAdapter extends BaseAdapter{ private List<String> data;//数据源 private Context context; private LayoutInflater inflater; public MyAdapter(Context context, List<String> data) { this.context = context; this.data = data; inflater = LayoutInflater.from(context); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView==null){ holder = new ViewHolder();//实例化ViewHolder //通过LayoutInflater实例化布局 convertView = inflater.inflate(R.layout.item_list1,null); holder.im = (ImageView) convertView.findViewById(R.id.imageView); holder.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(holder);//设置Tag将两者联系起来 }else { //通过Tag找到缓存的布局 holder = (ViewHolder) convertView.getTag(); } holder.im.setImageResource(R.mipmap.ic_launcher); holder.tv.setText("hello:"+data.get(position)); return convertView; } private class ViewHolder{ TextView tv; ImageView im; } }
2.listView实现简单聊天界面
chat_item_me.XML<?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"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_time_me" android:layout_alignParentTop="true" android:text="10:28" android:layout_marginBottom="10dp" android:layout_centerHorizontal="true"/> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:id="@+id/iv_me" android:layout_below="@id/tv_time_me" android:layout_alignParentRight="true" android:src="@mipmap/ic_launcher"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_me" android:layout_below="@id/tv_time_me" android:text="" android:gravity="center" android:maxWidth="550px" android:layout_toLeftOf="@id/iv_me" android:background="@drawable/chatitem_out_bg"/> </RelativeLayout>
chat_item_other.XML
public class ChatAdapter extends BaseAdapter { private List<ChatBean> data; private LayoutInflater inflater; public ChatAdapter(Context context, List<ChatBean> data) { this.data = data; inflater = LayoutInflater.from(context); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView==null){ if (getItemViewType(position)==0){ holder = new ViewHolder(); convertView = inflater.inflate(R.layout.chat_item_me,null); holder.iv = (ImageView) convertView.findViewById(R.id.iv_me); holder.tv = (TextView) convertView.findViewById(R.id.tv_me); holder.time = (TextView) convertView.findViewById(R.id.tv_time_me); }else { holder = new ViewHolder(); convertView = inflater.inflate(R.layout.chat_item_other,null); holder.iv = (ImageView) convertView.findViewById(R.id.iv_other); holder.tv = (TextView) convertView.findViewById(R.id.tv_other); holder.time = (TextView) convertView.findViewById(R.id.tv_time_other); } convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.iv.setImageBitmap(data.get(position).getIcon()); holder.tv.setText(data.get(position).getText()); holder.time.setText(data.get(position).getTime()); return convertView; } @Override//返回第position个item是何类型 public int getItemViewType(int position) { ChatBean bean = data.get(position); return bean.getType(); } @Override//返回不同布局的总数 public int getViewTypeCount() { return 2; } class ViewHolder{ public ImageView iv; public TextView tv; public TextView time; } }
bean类
/** * Created by Administrator on 2016/4/17. */ public class ChatBean { private int type;//信息来源类型 private String text;//聊天信息 private String time;//聊天时间 private Bitmap icon;//聊天头像 public int getType() { return type; } public void setType(int type) { this.type = type; } public String getText() { return text; } public void setText(String text) { this.text = text; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public Bitmap getIcon() { return icon; } public void setIcon(Bitmap icon) { this.icon = icon; } }
Activity
public class ChatViewActivity extends AppCompatActivity { private ListView listView; private List<ChatBean> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat_view); listView = (ListView) findViewById(R.id.listView); ChatBean bean1 = new ChatBean(); bean1.setType(0); bean1.setText("你好啊"); bean1.setTime("10:50"); bean1.setIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); list.add(bean1); ChatBean bean2 = new ChatBean(); bean2.setType(1); bean2.setText("你好"); bean2.setTime("10:50"); bean2.setIcon(BitmapFactory.decodeResource(getResources(),R.drawable.in_icon)); list.add(bean2); ChatBean bean3 = new ChatBean(); bean3.setType(0); bean3.setText("Hello,it's nice to meet you"); bean3.setTime("10:50"); bean3.setIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); list.add(bean3); ChatBean bean4 = new ChatBean(); bean4.setType(1); bean4.setText("It's nice to meet you too!"); bean4.setTime("10:50"); bean4.setIcon(BitmapFactory.decodeResource(getResources(),R.drawable.in_icon)); list.add(bean4); ChatBean bean5 = new ChatBean(); bean5.setType(1); bean5.setText("How old are you?"); bean5.setTime("10:50"); bean5.setIcon(BitmapFactory.decodeResource(getResources(),R.drawable.in_icon)); list.add(bean5); ChatBean bean6 = new ChatBean(); bean6.setType(0); bean6.setText("I am 22 years old"); bean6.setTime("10:50"); bean6.setIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); list.add(bean6); listView.setAdapter(new ChatAdapter(this,list)); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories