Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

InfiniteScroll 역순 정렬 #438

Closed
1 of 9 tasks
Randomdog7153 opened this issue Sep 18, 2023 · 10 comments
Closed
1 of 9 tasks

InfiniteScroll 역순 정렬 #438

Randomdog7153 opened this issue Sep 18, 2023 · 10 comments
Assignees
Labels
question Issue type : Question UI Service : UI

Comments

@Randomdog7153
Copy link

Randomdog7153 commented Sep 18, 2023

Service

  • WebView
  • AssetManagement
  • Communicator
  • LogViewer
  • Manager
  • UI
  • Profiler
  • Adapter
  • DLST

Version

Write the version that you are currently using.
GPM 2.2.5
Common 2.3.1
UI 2.7.3

Summary

A clear and concise description of what the question is.
InfiniteScroll 정렬 순서 변경을 하고 싶어 문의드립니다.

Screenshots

If applicable, add screenshots to help explain your question.

Additional context

Add any other context about the problem here.

InfiniteScroll을 사용할 때 정렬 순서를 리스트의 첫 데이터가 가장 마지막이게, 리스트의 마지막 데이터가 가장 처음이게 하고 싶어서 UpdateShowItem 함수에서 for문을 수정하니 마지막 데이터 1개만 표기가 됩니다. 이런 경우 어떻게 해야하나요?

@Randomdog7153 Randomdog7153 added the question Issue type : Question label Sep 18, 2023
@smflt-nhn
Copy link
Contributor

@Randomdog7153

안녕하세요.
데이터를 역순으로 InsertData로 추가하면 역순으로 구성됩니다.
감사합니다.

@smflt-nhn smflt-nhn self-assigned this Sep 18, 2023
@Randomdog7153
Copy link
Author

InfiniteScroll 의 InsertData 데이터인가요? 아니면 데이터를 관리하는 리스트의 InsertData 인가요?

[SerializeField] private InfiniteScroll shotScrollList;
private List dataList = new List();

public void InsertData()
{
AnalysisShotData data = new AnalysisShotData();
data.index = index++;
dataList.Add(data);

    shotScrollList.InsertData(data);
}

이런 식으로 작업되어 있습니다.

@smflt-nhn
Copy link
Contributor

@Randomdog7153

데이타를 관리하는 리스트 입니다.

하나씩 추가할 때는 한개로도 추가가능하지만 리스트로도 한번에 추가 가능합니다.

1개씩 추가 시

AnalysisShotData data = new AnalysisShotData();
shotScrollList.InsertData(data); 

관리되는 리스트 한번에 추가 시

for
{
   AnalysisShotData data = new AnalysisShotData();
   data.index = index++;
   dataList.Add(data);
}

shotScrollList.InsertData(dataList);

관리되는 리스트를 역순으로 만들거나 역순대로 추가하는 방법도 있습니다.

for dataList 역순
{
    shotScrollList.InsertData(dataList[i]);
}

@Randomdog7153
Copy link
Author

죄송합니다. 정확히 어떻게 수정을 해야할 지 잘 이해가 가지 않아서요

// 리스트 비교후 다른 만큼만 로드 함
void LoadList()
{
if (dataList.Count != PM._practicePlayer.ShotList.Count)
{
int difference = Mathf.Abs(dataList.Count - PM._practicePlayer.ShotList.Count);

        // 다른 만큼 불러오기
        for (int i = 0; i < difference; i++)
        {
            InsertData();
        }
        UpdateAllData();
    }
    else
    {
        UpdateAllData();
    }
}

public void InsertData()
{
    AnalysisShotData data = new AnalysisShotData();
    data.index = index++;
    dataList.Add(data);

    shotScrollList.InsertData(data);
}

public void UpdateAllData()
{
    shotScrollList.UpdateAllData();
}

지금 작업되어있는 상태인데요.. dataList.Add(data); 부분을 Insert(0, data); 로 바꾸면 된다는 말씀이신가요?
PM._practicePlayer.ShotList의 데이터를 가져와 사용하는 상황인데 PM._practicePlayer.ShotList에 데이터를 추가하는 것도 역순으로 해야하는건가요?

@smflt-nhn
Copy link
Contributor

@Randomdog7153
이런식으로 스크롤에 역순으로 넣어 주면 될것같습니다.

void LoadList()
{
    if (dataList.Count != PM._practicePlayer.ShotList.Count)
    {
        int difference = Mathf.Abs(dataList.Count - PM._practicePlayer.ShotList.Count);

        // 다른 만큼 불러오기
        for (int i = 0; i < difference; i++)
        {
            AnalysisShotData data = new AnalysisShotData();
			data.index = index++;
			dataList.Add(data);
        }
		
		// 역순으로 추가
		for(int i=0;i<dataList.Count;i++)
		{
			int rev = dataList.Count - i - 1;
			shotScrollList.InsertData(dataList[rev]);
		}
		
        UpdateAllData();
    }
    else
    {
        UpdateAllData();
    }
}

@Randomdog7153
Copy link
Author

감사합니다 !

@Randomdog7153 Randomdog7153 reopened this Sep 18, 2023
@SangYun-nhn SangYun-nhn added the UI Service : UI label Sep 18, 2023
@Randomdog7153
Copy link
Author

Randomdog7153 commented Sep 18, 2023

@smflt-nhn 앗 해결이 된 줄 알았으나.. LoadList 같은 경우는 enable로 실행이 되기 때문에 매번 역순으로 데이터가 추가되어 쌓이더군요..
이런 경우는 초기화 시키고 넣어줘야 할 거 같은데, 그럴 경우 리스트가 많으면 다시 넣어줄 때 낭비가 너무 심할 거 같습니다..
그래서

void LoadList()
{
if (dataList.Count != PM._practicePlayer.ShotList.Count)
{
int difference = Mathf.Abs(dataList.Count - PM._practicePlayer.ShotList.Count);

        // 다른 만큼 불러오기
        for (int i = 0; i < difference; i++)
        {
            AnalysisShotData data = new AnalysisShotData();
            data.index = index++;
            dataList.Add(data);

            int rev = dataList.Count - i - 1;
            shotScrollList.InsertData(dataList[rev]);
        }

    }

    UpdateAllData();
}

이렇게 바꾸었는데 그러면 다시 오류가 생기더군요 ㅠㅠ.. shotScrollList가 리스트가 아니니까 중복검사도 어려워 혹시 어떻게 해야할까요?

@smflt-nhn
Copy link
Contributor

@Randomdog7153
안녕하세요
현재 InfiniteScroll 에서는 중간에 데이터를 추가하는 방법이 없습니다.
때문에 초기화 후에 추가 해야합니다.

중간에 데이터를 넣을수 있게 수정했습니다. 익스포트 후
shotScrollList.InsertData(data, 추가 인덱스) 이렇게 중간에 추가할 수 있습니다.

gpm_ui_v2.7.4.zip

shotScrollList.InsertData(data, 0) 같이 인덱스를 0에 추가를 하면 제일 처음에 추가되기 때문에 역순으로 추가될것 입니다.

코드는 아래와 같을것입니다.

void LoadList()
{
    if (dataList.Count != PM._practicePlayer.ShotList.Count)
    {
        int difference = Mathf.Abs(dataList.Count - PM._practicePlayer.ShotList.Count);

        // 다른 만큼 불러오기
        for (int i = 0; i < difference; i++)
        {
            InsertData();
        }
        UpdateAllData();
    }
    else
    {
        UpdateAllData();
    }
}

public void InsertData()
{
    AnalysisShotData data = new AnalysisShotData();
    data.index = index++;
    dataList.Add(data);
   
    // 0번 인덱스에 추가
    shotScrollList.InsertData(data, 0);
}

public void UpdateAllData()
{
    shotScrollList.UpdateAllData();
}

@Randomdog7153
Copy link
Author

넵 감사합니다. 잘 적용되는 걸 확인했습니다 !

@smflt-nhn
Copy link
Contributor

@Randomdog7153
역순으로 정렬할 수 있도록 2.9.0에 기능 추가하여 배포하였습니다.

릴리즈 노트

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Issue type : Question UI Service : UI
Projects
None yet
Development

No branches or pull requests

3 participants