获取主页数据并显示流程笔记

1.定义了一个名为 MainViewListItemData 的类,用于存储主界面中每个列表项的数据。

复制代码
public class MainViewListItemData
{
    //名字
    public string m_Name;
    //描述
    public string m_Desc;
    //图片或者视频的url
    public string m_Url;
    //是否是小视频,
    public bool m_IsMove;
    //点赞数
    public int m_StartCnt;
    
}

2.定义了一个名为 EventId 的枚举,用于标识各种事件的类型。增加一个主页列表更新的事件ID:HomeUpdateList。

这样的优点是:通过这样的枚举定义,可以方便地标识和管理不同类型的事件。

namespace WeiLai.Enum

{

public enum EventId

{

None,

#region Login System

LoginBegin = 1000,

LoginSucc,

LoginEnd = 1999,

HomeBegin = 7000,

HomeSucc,

HomeUpdateList,

HomeEnd = 7999

#endregion

}

}

3.需要用于创建和回收事件对象方法。

public static EmptyEvt Fetch(EventId evtId)

{

var evt = EventMgr.Inst.GetEvent<EmptyEvt>();

evt.EvtId = (int)evtId;

return evt;

}

这个方法获取一个特定类型的事件对象,其中参数 evtId 表示事件的标识符。

public override void OnRecyle()

{

EvtId = -1;

}

这个方法用于回收事件对象,Evtid 设置为 -1,表示该事件的对象已经被回收了。这样可以确保事件对象在被使用之前能被正确地重置,可以避免一些不必要的的数据混乱或错误。

4.在数据管理的脚本中声明一个字典

复制代码
public Dictionary<int, List<MainViewListItemData>> m_MainViewListData;

这个字典用于存储主视图列表数据,其中键是整数类型,表示主视图列表的索引,值是一个列表,存储了 MainViewListItemData 类型的数据。这个MainViewListItemData是用于存放列表项的数据。

还要初始化这个m_MainViewListData

private void _InitMainViewListData()

{

m_MainViewListData = new Dictionary<int, List<MainViewListItemData>>(m_MainTitle.Length);

}

目的是在初始化阶段为 m_MainViewListData字段创建一个新的字典对象,并设置其大小。

5.需要一个用于获取特定标题索引的数据列表方法和一个用于更新主视图中特定标题的数据的方法

复制代码
public List<MainViewListItemData> GetMainViewData(int tilteIndex)
{
    List<MainViewListItemData> list;
    if (!m_MainViewListData.TryGetValue(tilteIndex, out list))
    {
        list = new List<MainViewListItemData>();
        m_MainViewListData.Add(tilteIndex, list);
    }
    return list;
}

这个方法的作用是获取特定标题索引的主视图数据列表,如果该索引对应的数据列表不存在,则创建一个新的列表并将其添加到字典中。

复制代码
public void UpdateMainView(int tilteIndex, MainViewListItemData[] datas)
{
    List<MainViewListItemData> list = GetMainViewData(tilteIndex);
    foreach (var data in datas)
    {
        list.Add(data);
    }
    
    EventMgr.Inst.Broadcast(IntEvt.Fetch(EventId.HomeUpdateList, tilteIndex));
}

这个方法用于更新主视图中特定标题的数据,并通知事件管理器广播一个主视图更新的事件。

因此需要注册广播事件在注册后还需要反注册。

public override void Show()

{

base.Show();

EventMgr.Inst.Register(EventId.HomeUpdateList, _UpdateList);

}

当HomeUpdateList事件被触发时,就会调用_UpdateList方法

public override void UnShow()

{

EventMgr.Inst.UnRegister(EventId.HomeUpdateList, _UpdateList);

base.UnShow();

}

这样可以在界面隐藏时取消监听 HomeUpdateList 的事件,并移除 _UpdateList 方法。

其中的_UpdateList方法用于确保参数是正确的事件类型

复制代码
private void _UpdateList(BaseEvent obj)
{
    if (obj is IntEvt intEvt)
    {
        var titleIdx = intEvt.m_Value;
        m_HomeView.UpdateList(titleIdx);
    }
}

6.需要一个用于获取网络数据的方法,这里用模拟代替。

public void GetMainViewData(int titleIndex)

{

TimerMgr.Inst.AddTimer(1.0f, 1, () =>

{

MyLogger.Info($"on get main index = {titleIndex}");

var testData = new MainViewListItemData[Constant.m_MainViewEachRequestNum];

for (int i = 0; i < Constant.m_MainViewEachRequestNum; i++)

{

var data = new MainViewListItemData();

data.m_Name = "name" + i.ToString();

data.m_Desc = "desc" + i.ToString();

data.m_Url =

复制代码
"https://img2.imgtp.com/2024/04/13/kk2byMrk.png";

testData[i] = data;

}

DataMgr.Inst.UpdateMainView(titleIndex, testData);

});

}

}

复制代码

代码分析:

通过接受一个整数参数 titleIndex,这个代表数据的标题索引。通过定时器模拟获取数据,最后将获取到的标题索引和数据数组作为参数传递给 UpdateMainView 方法,用于更新主视图数据。

7.追后当拿到数据之后显示在列表视图中,因此需要一个更新列表视图的方法。

复制代码
public void UpdateList(int titleIdx)
{
    foreach (var dataList in DataMgr.Inst.GetMainViewData(titleIdx))
    {
        // 检查索引是否超出数组范围
        if (i >=Constant.m_MainViewEachRequestNum)
        {
            i = 0;
        }
        if (i < m_numbers.Length && i < m_numbers2.Length)
        {
            m_numbers[i] = dataList.m_Name;
            m_numbers2[i] = dataList.m_Url;
            i++;
        }
        else
        {
            MyLogger.Info("i的大小:"+i+"m_numbers的长度:"+m_numbers.Length+"m_numbers2.Length的长度"+m_numbers2.Length);
            return;            
        }
    }
    m_list2 = _mainView.GetChild("n19").asList;
    m_list2.SetVirtual();//设置为虚方法
    m_list2.itemRenderer = RenderListItem1;
    m_list2.numItems = 50;
    m_list2.RefreshVirtualList();
}

这个方法通过传入要更新列表的索引,就可以更新指定索引的数据。这样就可以将数据显示在列表视图中了

相关推荐
wusam2 分钟前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)
学习·docker·centos
攸攸太上2 分钟前
Spring Gateway学习
java·后端·学习·spring·微服务·gateway
Geek之路43 分钟前
QT系统学习篇(1)
开发语言·qt·学习
IFTICing1 小时前
【文献阅读】Attention Bottlenecks for Multimodal Fusion
人工智能·pytorch·python·神经网络·学习·模态融合
新手unity自用笔记1 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#
神一样的老师1 小时前
讯飞星火编排创建智能体学习(四):网页读取
人工智能·学习·语言模型·自然语言处理
韬. .1 小时前
树和二叉树知识点大全及相关题目练习【数据结构】
数据结构·学习·算法
一尘之中2 小时前
CycleGAN图像风格迁移互换
人工智能·学习
我命由我123452 小时前
SSL 协议(HTTPS 协议的关键)
网络·经验分享·笔记·学习·https·ssl·学习方法
丶Darling.3 小时前
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树
开发语言·数据结构·c++·笔记·学习·算法