声明
在这里只做xml布局文件展示,数据均为模拟数据,数据库联动数据查询可看博文《android进阶-数据库查询数据展示》
ListView简介
ListView用户android后端数据在布局中展示的组件,一般在Java代码中配合Adapter和使用。建立ArraryAdapter适配器,通过泛型来指定要适配的数据类型,然 后在构造函数中把要适配的数据传入。
inflate
inflate 可以将 xml布局资源 转化为 view对象。称之为打气筒,常见inflate打气筒方法
DisplayView = View.inflate(getApplicationContext(),R.layout.item,null);
或
DisplayView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item,null);
或
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
DisplayView = inflater.inflate(R.layout.item,null);
简单列表 listview
activity_main.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center|top"
android:textSize="20dp"
android:text="下方listview可以上下滚动">
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="200dp"
android:fastScrollEnabled="true">
MainActivity.java
package com.example.listview_project;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private String [] data = {"小猫","小狗","小猪","小鼠","小狼","小虎","小象","小猴","小鹿"};
// 或 private String[] data = {"姓名:小明","性别:男","年龄:25","居住地:上海","邮箱:xiaoming@qq.com"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ArraryAdapter适配器,通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入。
ArrayAdapter list_data = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1,data);
// 定义界面布局元素对象
ListView list_View = (ListView) findViewById(R.id.text1);
// 把数据传输到布局界面
list_View.setAdapter(list_data);
}
}
带标题的 listview
activity_main.xml
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content">
MainActivity.java
package com.example.listview_project;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends ListActivity {
// 模拟数据
private String[] mListTitle = {"姓名", "性别", "年龄", "居住地", "邮箱"};
private String[] mListStr = {"小明", "男", "25", "上海", "xiaoming@qq.com"};
// 声明map类型数组
ArrayList mData= new ArrayList();;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 将模拟数据添加到map数组中
for(int i = 0; i < mListTitle.length; i++) {
Map item = new HashMap();
item.put("title", mListTitle[i]);
item.put("text", mListStr[i]);
mData.add(item);
}
// SimpleAdapter 适配器,通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入。
SimpleAdapter list_data = new SimpleAdapter(this,mData,android.R.layout.simple_list_item_2,
new String[]{"title","text"},new int[]{android.R.id.text1,android.R.id.text2});
setListAdapter(list_data);
}
}
带图片和文字的 listview
使用 inflate 将布局资源转换 view对象
activity_main.xml 主布局文件
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="match_parent">
item.xml 图文渲染模版示例布局文件
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="35pt"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
>
android:id="@+id/iv_con"
android:layout_width="30pt"
android:layout_height="30pt"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:src="@mipmap/ic_launcher">
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/iv_con"
android:layout_marginLeft="10dp"
android:textSize="22dp"
android:textStyle="bold"
android:singleLine="true"
android:ellipsize="end"
android:text="这是一个安卓开发inflate练习的模拟标题数据标题">
android:layout_width="match_parent"
android:layout_height="20pt"
android:layout_toRightOf="@id/iv_con"
android:layout_below="@+id/title_text"
android:layout_marginLeft="10dp"
android:textSize="16dp"
android:ellipsize="end"
android:text="这是开发测试的内容,内容就随便写写了,反正也是凑字数。等后期学到数据库就从后端调用了,不用再写模拟数据了">
MainActivity.java
package com.example.listview_project;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 定义界面布局元素对象
ListView list_View = (ListView) findViewById(R.id.text1);
// 把数据传输到布局界面
list_View.setAdapter(new MyAdapter());
}
// 数据适配器方法
private class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
// 返回显示的行数
return 20;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View DisplayView;
// listview 优化
if (view == null){
// 通过 inflate 将 xml布局资源 转化为 view对象
DisplayView = View.inflate(getApplicationContext(),R.layout.item,null);
// 或
//DisplayView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item,null);
}else{
// 复用历史缓存对象
DisplayView = view;
}
return DisplayView;
}
}
}