@Kawai4ik

Как сделать подзагрузку данных для TableView?

Подскажите как правильно организовать подзагрузку данных для TableView чтобы не было лагов и было "правильно".
Имеется АПИ, с которого я получаю данные (АПИ свое, могу править как нужно). Допустим я вытягиваю 20 ближайших объектов и отдаю их в приложение. Они отображаются.
Далее пользователь просмотрев все 20 пытается промотать таблицу ниже 20 (у нас только 20 объектов есть), больше 20 не загружается, а нужно после 20 записей сделать еще 20 и тд.
Подскажите как правильно организовать и где подзагрузку данных для TableView - чтобы решить такую задачу ?
Вот мой исходный код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Jsonnn : MonoBehaviour
{
    public RectTransform prefab;
    public Text countText;
    public RectTransform content;
    public GameObject ItemPrefab;

    public Sprite icon;
    public int cells;

    public void UpdateItems()
    {
        float height = prefab.rect.height;

        if (height < 100 * cells)
        {
            height = 100 * cells;
        }
        string url = "http://62.113.112.195:8000/page/0";
        WWW www = new WWW(url);
        StartCoroutine(GetItems(www, results => OnReceivedModels(results)));

        content.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);
        content.SetPositionAndRotation(new Vector3(0, -height / 2, 0), Quaternion.Euler(0, 0, 0));

        for (int i = 0; i < cells; i++)
        {
            GameObject cell = Instantiate(ItemPrefab);
            cell.transform.SetParent(content.transform, false);      
        }
    }
    void OnReceivedModels(TestItemModel[] models)
    {
        foreach (Transform child in content)
        {
            Destroy(child.gameObject);
        }
        foreach (var model in models)
        {
            var instance = GameObject.Instantiate(prefab.gameObject) as GameObject;
            instance.transform.SetParent(content, false);
            InitializeItemView(instance, model);
        }
    }
    void InitializeItemView(GameObject viewGameObject, TestItemModel model)
    {
        TestItemView view = new TestItemView(viewGameObject.transform);
        view.titleText.text = model.title;
        view.Time.GetComponentInChildren<Text>().text = model.time;
        view.Day.GetComponentInChildren<Text>().text = model.day;
        view.Year.GetComponentInChildren<Text>().text = model.year;
        view.Dayweek.GetComponentInChildren<Text>().text = model.dayweek;
        {
                Debug.Log(view.titleText.text + " is clicked!");
            }   
    }
    IEnumerator GetItems(WWW www, System.Action<TestItemModel[]> callback)
    {
        yield return www;

        if (www.error == null)
        {
            TestItemModel[] mList = JsonHelper.getJsonArray<TestItemModel>(www.text);
            Debug.Log("WWW Success: " + www.text);
            callback(mList);
        }
        else
        {
            TestItemModel[] errList = new TestItemModel[1];
            errList[0] = new TestItemModel();
            errList[0].title = www.error;
            
            Debug.Log("WWW Error: " + www.error);
            callback(errList);
        }
    }
    public class TestItemView
    {
        public Text titleText;
        public Text Time;
        public Text Day;
        public Text Dayweek;
        public Text Year;

        public TestItemView(Transform rootView)
        {
            titleText = rootView.Find("titleText").GetComponent<Text>();
            Time = rootView.Find("Time").GetComponent<Text>();
            Day = rootView.Find("Day").GetComponent<Text>();
            Dayweek = rootView.Find("Dayweek").GetComponent<Text>();
            Year = rootView.Find("Year").GetComponent<Text>();
        }
    }
    [System.Serializable]
    public class TestItemModel
    {
        public string title;
        public string time;
        public string day;
        public string dayweek;
        public string year;
    }
    public class JsonHelper
    {
        public static T[] getJsonArray<T>(string json)
        {
            string newJson = "{ \"array\": " + json + "}";
            Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(newJson);
            return wrapper.array;
        }
        public static string arrayToJson<T>(T[] array)
        {
            Wrapper<T> wrapper = new Wrapper<T>();
            wrapper.array = array;
            return JsonUtility.ToJson(wrapper);
        }
        [System.Serializable]
        private class Wrapper<T>
        {
            public T[] array;
        }
    }
}
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы