어제도 비슷한 질문드렸었는데 답변해주신 선생님께서 리스트뷰 버리고 리사이클뷰 쓰라고하시길래..
버리고 구글링하면서 어떤건지 보고있는데요~
지금 버튼을 누르면 EditTextView 두개와 이미지뷰 하나로 구성되어있는 아이템을 추가하려고하는데..
이때 아이템 클래스에서 텍스트뷰 같은경우에는 문자열을 저장할 String 으로 2개 이미지는 Drawable로 한개 이렇게 선언을 할텐데..
그럼 EditText는 어떤 변수를 선언하나요?
EditText는 입력만하는거라 딱히 필요한가 싶기도한데 어떻게 해야하나요
뷰홀더에서 전역으로 데이터바인딩을 하거나 findviewbyid로 객체 선언한거 초기화하면 되자너
문자열을 출력만 할거면 걍 TextView 쓰는거구
훔 이해가 잘안가는데...형님 그럼 아이템 클래스에서 따로 EditText를 위한 String 변수같은거 추가할 필요는 없는건가요
참고로 버튼클릭해서 EditText아이템추가하고 입력만 하는기능이에여
그니까 버튼을 누르면 생기는 아이템에 문자열이랑 이미지 표시한다는 얘기 아님? 그리고 추가한 아이템에 텍스트를 입력하거나 변경은 안 하는거고
아이템 클래스란게 난 이해가 안 가는데 DTO를 말하는건지 어댑터를 말하는건지
https://recipes4dev.tistory.com/167?category=790402
여기서 3.4한번 봐주세여 그게 제가 말하는 아이템클래스에여
만약 DTO에 대한 얘기면 이미지에 넣을 drawable resid값은 int형 하나랑 문자열 출력을 위한 String형 두개 선언 해줘야지
3.4대로 저렇게 선언하고 어댑터의 onBindViewHolder에서 holder로 컴포넌트 가져와서 값 넣어주는건데 걍 저거대로 따라하면 되는거 아냐? 뭐가 궁금한건데
DTO가 뭔지 잘몰라서..EditText도 String을 해줘야하나요? EditText는 뷰만 추가되면 입력할 수 있어서 필요없다고 생각했는데
그러니까 저 예제는 TextView잖아요? TextView니까 main에서 미리 Text값을 주는데 EditText는 제가 직접 어플에서 입력값을 입력하는거니까
3.4처럼 String에 TextView 값을 저장하는 변수가 필요한가 싶어서요
처음에 아이템 만들때 기본 텍스트가 없고 아이템 안에서 텍스트를 변경해서 쓸거면 String을 선언 안 해줘도 되지
아 그러면 저같은경우는 이미지 하나만 있으면 되나요?
만약 거기서 끝나는 거면 없어도 되는데 만약 그 수정된 문자열로 쓸 생각이면 그걸 저장할 객체가 있어야 되니까 String이 있어야 되는거고
넹 따로 저장까지는 제 실력에서는 못가겠고..일단 버튼 클릭해서 EditText 두개랑 이미지 하나 의 아이템만 추가되서 그 내에서 입력만 할 수 있으면 되는 기능을 만들고싶어요
근데 리스트뷰면 상관 없는데 아이템이 많아질때는 리사이클러뷰라 스크롤할떄마다 새로 그리기 때문에 그 변경한 문자열을 따로 저장해서 onBindViewHolder에서 써야됨
만약 안 그러면 스크롤로 내렸다가 다시 올리면 엉뚱한 값들이 출력되고 그럼
새로 그린다는 말은..만약에 아이템을 추가하고 거기에 입력을 해두고 계속해서 아이템을 추가하면 그 입력값들도 새로 그려져서 없어진다는 말인가요?
리사이클러뷰란걸 설명해주자면 만약 아이템이 100개가 있고 화면상에 90~100번째가 보인다면 1~89번까지의 아이템은 안 그려져 있고 스크롤해서 보이는 부분만 그때그때 새로 그림
그래서 필요한 부분만 그때그때 쓰는거라 리스트뷰처럼 한꺼번에 계속 잡아놓지 않아서 메모리나 성능적으로 낫다는거임
헐..그럼 90~100번째 보인다면 다시 스크롤을 올리면 어떻게 되나요?
그니까 거기서 정상적으로 출력해주기 위해서 니가 준 링크의 3.4처럼 String 객체에 저장해놨다가 onBindViewHolder에서 그때그때 포지션에 맞게 출력되도록 해줘야 되는거임
onBindViewHolder에서 특별한 작업이 안 되어 있고 90~100번쨰 아이템에 니가 11111이란 문자열을 넣어놓고 쭉 올리면 위에 있는 아이템들도 11111이라고 출력 될거임
아 그렇구나..그럼 결국은 필요한거네..String이..그니까 스크롤을 다시올리면 원래라면 EditText에 입력했던 값이 안보이는데 보이게하려면 3.4에 처럼 String에 EditText에 저장된 값을 따로 저장해놨다가 나시 setText이걸로 포지션에 맞게 값을 넣어줘야한다~ 이말인가요?
ㅇㅇ 맞음
그니까 이전에 입력했던 값들은 딴데가고 없고 제일 최근?에 입력했던 값으로 새로 그려져서 새로 스크롤된 부분에 그릴때 그 값이 입력된다 이 말씀이죠
이거 내실력으로 할 수있으려나..ㅜㅜ일단 버튼 추가하는거부터해봐야겠다..ㅜㅜ
선생님 계신가요