您的位置:首页 > 移动开发 > Android开发

listView学习记录

2016-04-17 12:22 435 查看
listView常用属性值:

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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android listview