78 lines
2.1 KiB
C#
78 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEngine.UI.Extensions.Examples
|
|
{
|
|
public class Example04ScrollView : FancyScrollView<Example04CellDto, Example04ScrollViewContext>
|
|
{
|
|
[SerializeField]
|
|
ScrollPositionController scrollPositionController;
|
|
|
|
Action<int> onSelectedIndexChanged;
|
|
|
|
void Awake()
|
|
{
|
|
scrollPositionController.OnUpdatePosition(p => UpdatePosition(p));
|
|
scrollPositionController.OnItemSelected(HandleItemSelected);
|
|
|
|
SetContext(new Example04ScrollViewContext
|
|
{
|
|
OnPressedCell = OnPressedCell,
|
|
OnSelectedIndexChanged = index =>
|
|
{
|
|
if (onSelectedIndexChanged != null)
|
|
{
|
|
onSelectedIndexChanged(index);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
public void UpdateData(List<Example04CellDto> data)
|
|
{
|
|
cellData = data;
|
|
scrollPositionController.SetDataCount(cellData.Count);
|
|
UpdateContents();
|
|
}
|
|
|
|
public void UpdateSelection(int index)
|
|
{
|
|
if (index < 0 || index >= cellData.Count)
|
|
{
|
|
return;
|
|
}
|
|
|
|
scrollPositionController.ScrollTo(index, 0.4f);
|
|
Context.SelectedIndex = index;
|
|
UpdateContents();
|
|
}
|
|
|
|
public void OnSelectedIndexChanged(Action<int> onSelectedIndexChanged)
|
|
{
|
|
this.onSelectedIndexChanged = onSelectedIndexChanged;
|
|
}
|
|
|
|
public void SelectNextCell()
|
|
{
|
|
UpdateSelection(Context.SelectedIndex + 1);
|
|
}
|
|
|
|
public void SelectPrevCell()
|
|
{
|
|
UpdateSelection(Context.SelectedIndex - 1);
|
|
}
|
|
|
|
void HandleItemSelected(int selectedItemIndex)
|
|
{
|
|
Context.SelectedIndex = selectedItemIndex;
|
|
UpdateContents();
|
|
}
|
|
|
|
void OnPressedCell(Example04ScrollViewCell cell)
|
|
{
|
|
UpdateSelection(cell.DataIndex);
|
|
}
|
|
}
|
|
}
|