自分はこのやり方でリストビューの内部テキストを変更いたしました。
I changed the internal text of the list view this way.
■.h
UPROPERTY()
UListView* UListViewTest = nullptr;
■.cpp
UListViewTest = Cast<UListView>(GetWidgetFromName(FName(TEXT("ListViewTest"))));
UListViewTest->OnEntryWidgetGenerated().AddLambda([](UUserWidget& uw)
{
auto* testex = Cast<UTextBlock>(uw.GetWidgetFromName(FName(TEXT("TextBlockTest"))));
testex->SetText(FText::AsNumber(50.f));
});
コールバックを設定して、リストに追加されたら追加されたウィジェットに変更を加えています。
I’m setting a callback and making changes to the added widget once it’s added to the list.
■追記-------------------------------------------------------------------------------------------------
もう一つの方法を見つけました。
I found another way.
リストビューに追加するwidgetにIUserObjectListEntryを継承して
Inherit IUserObjectListEntry to the widget to add to the list view
virtual void NativeOnListItemObjectSet(UObject* ListItemObject);
を使用する方法です。
This is the method to use.
■.h
> UCLASS()
class MY_API UListViewWidgetClass : public UUserWidget, public IUserObjectListEntry
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, meta = (BindWidget))
UTextBlock* ListTextBlock = nullptr;
public:
virtual void NativeOnListItemObjectSet(UObject* ListItemObject);
}
■.cpp
void UListViewWidgetClass::NativeOnListItemObjectSet(UObject* ListItemObject)
{
auto* data = Cast<DataBaseTest>(ListItemObject);
if (data)
{
ListTextBlock->SetText(FText::FromString(data->value));
}
}
追加するためのデータは以下の様にします
The data to add is as follows
■.h
UCLASS()
class MY_API DataBaseTest: public UObject
{
GENERATED_BODY()
public:
FString value;
};
リストビューへの追加は以下の様にします
Add to the list view as follows
■.cpp
TArray<DataBaseTest*> Datas;
for (int i = 0; i < 10; i++)
{
DataBaseTest* data = NewObject<DataBaseTest>();
data->value = FString::Printf(TEXT("text%d"), i);
Datas.Add(data);
}
if(UListViewTest)
{
UListViewTest->ClearListItems();
// ここで設定されたオブジェクトは「NativeOnListItemObjectSet」に渡されます
// The object set here is passed to "NativeOnListItemObjectSet"
UListViewTest->SetListItems(Datas);
}