最近在写通过Android获取云平台中的设备列表,需要动态更新ListView。因此写下了这篇笔记。在这里你将会学习如何动态添加ListView!下面是我借鉴的博主的内容
参考链接:https://blog.csdn.net/lcp0633/article/details/127651720
前言
- 这里我的环境是:Android Studio Dolphin | 2021.3.1
- 我们需要准备:ListView、子布局在res/Layout目录下创建一个ListView子布局、数据的实体类、和最重要的适配器,最后就是主程序的操作代码
- 效果图:
一、创建一个ListView布局文件
小知识:如何设置ListView的item之间的距离?
android:divider="@null"
android:fadingEdge="none"
android:headerDividersEnabled="false"
android:footerDividersEnabled="false"
<!-- 用来控制List View之间的间距-->>
android:dividerHeight="10dp"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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"
android:orientation="vertical"
tools:context=".ui.main.SecondFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="3dp"
android:fadingEdge="none"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false" />
</LinearLayout>
</LinearLayout>
二、创建一个ListView的子布局文件
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_message"
android:orientation="vertical"
android:padding="12dp">
<TextView
android:id="@+id/sensor_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="STM32"
android:textColor="@color/be_2"
android:textSize="25sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="2dp"
android:text="Uid:"
android:textColor="@color/be_2"
android:textSize="18sp" />
<TextView
android:id="@+id/sensor_uid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="10dp"
android:text="49"
android:textColor="@color/be_2" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="2dp"
android:text="Data:"
android:textColor="@color/be_2"
android:textSize="18sp" />
<LinearLayout
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/sensor_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="49"
android:textColor="@color/be_2" />
<TextView
android:id="@+id/sensor_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="3dp"
android:text="%"
android:textColor="@color/be_2" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
三、创建实体类(这里我们使用到了name、uid、data、unit)
package com.example.prodtech.tools.bean;
public class SensorBean {
private String name;
private String Uid;
private String Data;
private String Unit;
public SensorBean(String name, String uid, String data, String unit) {
this.name = name;
Uid = uid;
Data = data;
Unit = unit;
}
public String getUnit() {
return Unit;
}
public void setUnit(String unit) {
Unit = unit;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUid() {
return Uid;
}
public void setUid(String uid) {
Uid = uid;
}
public String getData() {
return Data;
}
public void setData(String data) {
Data = data;
}
}
四、创建一个适配器
适配器这里我们不做解释了https://www.cnblogs.com/AChenWeiqiangA/p/13093381.html
每一步都有详细的解释,若是还不明白欢迎留言大家一起解决!
package com.example.prodtech.tools.adapter;
import android.content.Context;
import android.hardware.Sensor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.example.prodtech.R;
import com.example.prodtech.tools.bean.SensorBean;
import java.util.List;
public class SensorAdapter extends ArrayAdapter<SensorBean> {
//用于存储Sensor对象数据
private List<SensorBean> sensorBeanList;
public SensorAdapter(Context context, int resource, List<SensorBean> objects) {
super(context, resource, objects);
sensorBeanList = objects;
//发生了数据更改需要更新UI
notifyDataSetChanged();
}
public void add(SensorBean sensorBean) {
//将SensorBean对象添加到数据源
sensorBeanList.add(sensorBean);
}
/**
* 用于设置ListView中每一项内同和UI的显示
* @param position 用于显示当前要处理List View中的项的位置
* @param convertView 要显示的视图
* @param parent 列表的父级视图
* @return 返回的是视图
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SensorBean sensorBean = getItem(position);
View view;
Sensor sensor;
if (convertView == null) {
//创建一个视图列表对象,并其填充到列表项中
view = LayoutInflater.from(getContext()).inflate(R.layout.list_sensor, parent,
false);
sensor = new Sensor();
sensor.sensor_name = view.findViewById(R.id.sensor_name);
sensor.sensor_uid = view.findViewById(R.id.sensor_uid);
sensor.sensor_data = view.findViewById(R.id.sensor_data);
sensor.sensor_unit = view.findViewById(R.id.sensor_unit);
//getView方法中的,SetTag方法把查找到的View缓存起来,方便多次使用
view.setTag(sensor);
} else {
view = convertView;
//getView方法中的,GetTag方法把这个数据取出来
sensor = (Sensor) view.getTag();
}
//设置要显示的内容
sensor.sensor_name.setText(sensorBean.getName());
sensor.sensor_uid.setText(sensorBean.getUid());
sensor.sensor_data.setText(sensorBean.getData());
sensor.sensor_unit.setText(sensorBean.getUnit());
//将生成的视图返回给GetView方法
return view;
}
class Sensor {
//定义了一个内部类,这个代码用于存储ListView中的每一项的数据
TextView sensor_name, sensor_uid, sensor_data, sensor_unit;
}
}
五、编写主程序的操作
在这里就可以实现动态添加ListView的操作,你可以使用点击事件等等;
public class ActivitySensorPage extends AppCompatActivity {
private List<SensorBean> sensorBeanList = new ArrayList<>();
private SensorAdapter sensorAdapter;
private SensorBean sensorBean;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.page_sensor);
listView = findViewById(R.id.sensor_listView);
sensorAdapter = new SensorAdapter(this, R.layout.list_sensor, sensorBeanList);
listView.setAdapter(sensorAdapter);
sensorBean = new SensorBean("123", "123", "123", "123");
sensorAdapter.add(sensorBean);
}
}
总结
本文主要进行如何动态添加ListView的,感觉博主,大家可以去看一下,真的很不错!!https://blog.csdn.net/lcp0633/article/details/127651720