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

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();
}

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

相关推荐
百流1 小时前
scala基础学习_运算符
开发语言·学习·scala
百流1 小时前
scala基础学习(数据类型)-数组
开发语言·学习·scala
虾球xz2 小时前
游戏引擎学习第61天
java·学习·游戏引擎
三万棵雪松2 小时前
3.系统学习-熵与决策树
学习·算法·决策树
无涯学徒19983 小时前
J9学习打卡笔记
笔记·学习
AI敲代码的手套3 小时前
解读目前AI就业岗位——大语言模型(LLM)应用工程师学习路线、就业前景及岗位全解析
人工智能·学习·语言模型
张铁铁是个小胖子7 小时前
微服务学习
java·学习·微服务
AITIME论道8 小时前
论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式
人工智能·深度学习·学习·机器学习·语言模型
青春男大11 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
mashagua12 小时前
RPA系列-uipath 学习笔记3
笔记·学习·rpa