一、功能属性
在Android开发中,ListView控件是一个比较常用的控件,他以列表的形式展现数据的内容,并且能根据列表的高度,自适应屏幕的显示。ListView控件的样式是由它的属性决定的,它的常用属性介绍如下:
属性 | 功能 |
android:listSelector | 当条目被点击后,改变条目的背景颜色 |
android:divider | 设置分割线颜色 |
android:scrollbars | 显示滚动条目 |
android:dividerHeight | 设置分割线高度 |
android:fadingEdge | 去掉上边和下边的黑色阴影 |
下面通过一个案例,进行熟悉掌握ListView控件
二、案例
前提说明:这个制作的这个程序,为了方便,采用的是本地数据(一般情况下是获取网上数据),通过创建Bean类用于获取数据
首先,在res/layout中创建一个activity_main(我创建的是linearlayout_listview01)和list_item01.然后代码如下:
linearlayout_listview01.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/lv"/>
</LinearLayout>
list_item01.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 这个布局相当于布局linearlayout_listview02一个条目,每个条目的布局都是一样的,只要复用进行-->
<!-- 数据一般是从网上获取的,但是这次为了方便学习,用本地创建Bean类进行-->
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/tv_two"
android:textSize="30sp"/>
</LinearLayout>
然后在Java文件中创建了Bean类和MainActivity类,为了进行数据填充,我还创建了MyAdapter类,代码如下:
Bean.java
package com.example.myapplication6;
public class Bean {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
MainActivity.java
package com.example.myapplication6;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private List<Bean> data=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.linearlayout_listview);
// 利用for循环获取数据
for (int i=0;i<100;i++){
Bean bean=new Bean();
bean.setName("登山的你"+i);
data.add(bean);
}
// 初始化,拿到listview对象
ListView listView=findViewById(R.id.lv);
// 进行数据的填充
listView.setAdapter(new MyAdapter(data,this));
}
}
MyAdapter.java
package com.example.myapplication6;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends BaseAdapter {
private List<Bean> data;
private Context context;
public MyAdapter(List<Bean> data, Context context) {
this.data = data;
this.context = context;
}
public MyAdapter() {
}
// 获取总共的数据
@Override
public int getCount() {
return data.size();
}
@Override
// 获取item
public Object getItem(int i) {
return null;
}
@Override
// 获取id
public long getItemId(int i) {
return i;
}
@Override
// 返回item的条目,然后进行设置
public View getView(int i, View view, ViewGroup viewGroup) {
// 进行复用,防止view反复创建
if(view==null){
// 拿到item条目的布局,inflate进行渲染item,
view=LayoutInflater.from(context).inflate(R.layout.list_item01,viewGroup,false);
}
// 拿到text
TextView textView=view.findViewById(R.id.tv_two);
textView.setText(data.get(i).getName());
Log.e("leg","getview"+i);
return view;
}
}
结果如下: