一、简单介绍
本文简单展示基于unity实现列表翻页显示。为避免数据过多造成资源浪费,采用循环使用列表项方法节省CPU和内存资源。列表实现采用预制体实例化遍历数据方法可见我之前文章。
效果展示图
二、关键代码
数据库内读取数据,列表显示。
using MySql.Data.MySqlClient;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class PageSwitch : MonoBehaviour
{
public static PageSwitch _instance;
//调用数据库
DataBase mysqldata = new DataBase();
//存放数据字典
//public Dictionary<int, Info> _InfoData = new Dictionary<int, Info>();
/// <summary>
/// 存放数据List
/// </summary>
public List<Info> _infoSaveList;
/// <summary>
/// 元素gameobject
/// </summary>
public GameObject[] info_;
/// <summary>
/// 当前页面索引
/// </summary>
private int pageIndex = 1;
/// <summary>
/// 总页数
/// </summary>
private int pageCount = 0;
/// <summary>
/// 元素总个数
/// </summary>
private int itemCount = 0;
public Text CurrentPage;
public Text PageCount;
/// <summary>
/// 设置每页元素数量
/// </summary>
private int PageItemCount = 10;
/// <summary>
/// 元素生成位置
/// </summary>
private Transform UICanvas;
/// <summary>
/// 当前页元素个数
/// </summary>
private int CurrentPageItemCount = 0;
// Use this for initialization
//private void Awake()
//{
// UICanvas = GameObject.Find("Canvas/ItemParent").transform;
//}
void Start()
{
_instance = this;
_infoSaveList = new List<Info>();
InitInfo();
PageCount.text = pageCount.ToString();
}
void Update()
{
CurrentPage.text = pageIndex.ToString();
}
/// <summary>
/// 初始化
/// 条件表达式三元运算符:如x>y?a:b,即当x>y时表达式取值a,否则取值b;
/// </summary>
void InitInfo()
{
//数据库查询
mysqldata.Select("user");
itemCount = _infoSaveList.Count;
//页码数
pageCount = _infoSaveList.Count % PageItemCount == 0 ? _infoSaveList.Count / PageItemCount : _infoSaveList.Count / PageItemCount + 1;
BindPage(pageIndex);
}
void BindPage(int index)
{
if (pageCount == 1)
{
int Item = 0;
for (int i = itemCount; i > 0; i--)
{
if (Item < itemCount)
{
//字典
//BindItem(info_[canDisPlay].transform, _InfoData[itemCount + 1 - i]);
//List
BindItem(info_[Item].transform, _infoSaveList[itemCount - i]);
info_[Item].gameObject.SetActive(true);
}
else
{
info_[Item].gameObject.SetActive(false);
}
Item++;
}
}
else if (pageCount > 1)
{
if (index == pageCount)
{
int Item = 0;
for (int i = PageItemCount; i > 0; i--)
{
if (Item < itemCount - PageItemCount * (index - 1))
{
//字典
//BindItem(info_[candisplay].transform, _InfoData[PageItemCount * index - i + 1]);
//List
BindItem(info_[Item].transform, _infoSaveList[itemCount - i]);
info_[Item].gameObject.SetActive(true);
}
else
{
info_[Item].gameObject.SetActive(false);
}
Item++;
}
}
else
{
for (int i = PageItemCount; i > 0; i--)
{
//字典
//BindItem(info_[PageItemCount - i].transform, _InfoData[PageItemCount * index - i + 1]);
//List
BindItem(info_[PageItemCount - i].transform, _infoSaveList[PageItemCount * index - i]);
info_[PageItemCount - i].gameObject.SetActive(true);
}
}
}
}
void BindItem(Transform tran, Info infos)
{
tran.Find("name/Text").GetComponent<Text>().text = infos.name;
tran.Find("psd/Text").GetComponent<Text>().text = infos.password.ToString();
}
public void PreClick()
{
if (pageCount <= 0)
return;
//第一页时禁止向前翻页
if (pageIndex <= 1)
return;
pageIndex -= 1;
if (pageIndex < 1)
pageIndex = 1;
BindPage(pageIndex);
}
/// <summary>
/// 首页
/// </summary>
public void FirstPage()
{
pageIndex = 1;
BindPage(pageIndex);
}
/// <summary>
/// 尾页
/// </summary>
public void LastPage()
{
pageIndex = pageCount;
BindPage(pageIndex);
}
public void NextClick()
{
if (pageCount <= 0)
return;
//最后一页禁止向后翻页
if (pageIndex >= pageCount)
return;
pageIndex += 1;
if (pageIndex >= pageCount)
pageIndex = pageCount;
BindPage(pageIndex);
}
}
public class DataBase
{
/// <summary>
/// 查询表内所有字段
/// </summary>
/// <param 表名="tableName"></param>
public void Select(string tableName)
{
string sqlSer = "server =" + Info.Instance._DatabaseIP + ";" + " port=" + Info.Instance._DatabasePort + ";" + " database =" + Info.Instance.Database + ";" + "user =" + Info.Instance._DatabaseUser + ";" + "password =" + Info.Instance._DatabasePassword + ";";
//Debug.Log(sqlSer);
MySqlConnection con = new MySqlConnection(sqlSer);
try
{
con.Open();
string sqlSelect = "select * from " + tableName;
//Debug.Log(sqlSelect);
MySqlCommand comd = new MySqlCommand(sqlSelect, con);
int resule = comd.ExecuteNonQuery();
comd.Dispose();
MySqlDataReader reader = comd.ExecuteReader();
while (reader.Read())
{
Info data = new Info
{
//id = reader.GetInt32("id"),
name = reader.GetString("username"),
password = reader.GetString("password"),
};
//PageSwitch._instance._InfoData.Add(data.id, data);
PageSwitch._instance._infoSaveList.Add(data);
}
}
catch (Exception e)
{
Debug.Log(e.Message);
}
finally
{
con.Close();
}
}
}
public class Info
{
private static Info _instance;
public static Info Instance
{
get
{
if (_instance == null)
{
_instance = new Info();
}
return _instance;
}
}
public int id { get; set; }
public string name { get; set; }
public string password { get; set; }
#region 数据库
//数据库IP
public string _DatabaseIP = "192.168.1.1";
//端口号
public string _DatabasePort = "3306";
//数据库名称
public string Database = "unity";
//数据库账号
public string _DatabaseUser = "root";
//数据库密码
public string _DatabasePassword = "******";
#endregion
}