安卓手机大多数作为竖屏滚动设备,ListView是最重要的控件之一,下面介绍如何使用ListView控件
首先在Activity的布局文件中加入ListView控件
activity_main.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">
<ListView
android:id="@+id/listView"
android:layout_height="match_parent"
android:layout_width="wrap_content"/>
</LinearLayout>
新建立ListView列表项的布局文件,包含一个textview控件,用于显示文本
list_item.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:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:textSize="25sp" />
</RelativeLayout >
新建一个java类ListItem,保存每一个列表项的数据,添加setter和getter方法
ListItem.java
package com.example.myapplication;
public class ListItem {
private int id;
private String text;
public int getId() {
return id;
}
public String getText() {
return text;
}
public void setId(int id) {
this.id = id;
}
public void setText(String text) {
this.text = text;
}
}
添加一个ListView的适配器类ListViewAdapter ,继承自BaseAdapter ,覆写其中的所有接口函数
ListViewAdapter.java
package com.example.myapplication;
import android.content.Context;
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 ListViewAdapter extends BaseAdapter {
private List<ListItem> labels;
private Context context;
public ListViewAdapter(List<ListItem> labels, Context context) {
this.labels = labels;
this.context = context;
}
@Override
public int getCount() {
return labels.size();
}
@Override
public Object getItem(int position) {
return labels.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//position 获取convertView的位置
//convertView ListView中的列表项
//parent ListView控件
//判断是否为空指针并且设置使用自定义的列表项布局
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.list_item,null,false);
}
获取列表项布局中的textview控件
TextView textView= (TextView)convertView.findViewById(R.id.textView);
//设置控件显示的文本
textView.setText(labels.get(position).getText());
//返回视图
return convertView;
}
}
在Activity中为list view添加适配器和监听事件
MainActivity.java
package com.example.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<ListItem> labels = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建列表项
for(int i = 0;i<10;i++){
ListItem listItem = new ListItem();
listItem.setText("Item "+String.valueOf(i));
labels.add(listItem);
}
//获取listview控件
ListView listView = (ListView)findViewById(R.id.listView);
//创建适配器
final ListViewAdapter listViewAdapter = new ListViewAdapter(labels,this);
//设置适配器
listView.setAdapter(listViewAdapter);
//添加列表项点击事件监听
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListItem listItem1 = (ListItem) listViewAdapter.getItem(position);
//提示点击项内容
Toast.makeText(getBaseContext(),"you are clicking "+listItem1.getText(),Toast.LENGTH_SHORT).show();
}
});
}
}
结果:
