ممنونم و آموزش رو میبینم ، اما این موردی که عرض کردم کل ریسایکلر رو پوشش قرار میده و قابل بحث و بررسی است.
بنده بطور شفاف روند ایجاد و حذف ویوها در ریسایکلر رو میدونم... قبلا هم عرض کردم ، حدود دو سال گذشته که اطلاع نداشتم چنین کتابخانه ای وجود داره در یکی از پروژه هام یک ریساکلر تک ستونی ساختم که با اسکرول آیتم ها ایجاد و اضافه میشدن.
و اما فرمودین : ""مشکل از کدنویسی شما بود عزیز. کتابخونه همچین مشکلی نداره. جوی ویوها رو ادکرده بودین که با اسکرول ریسایکلر روی پنل سوار میشده."
آیتم ها به شیوه خاص و عجیبی اضافه نشدن.
تمام آیتم ها به یک شیوه در رویداد OnCreateViewHolder ایجاد میشن.
اما در رویداد onBindViewHolder به لیبل شش آیتم اول متنی اضافه نکردم تا بشه پشتشون رو دید اما به بقیه متن دادم و پشتشون قابل مشاهده نیست.
آیتم ها نیز با شماره مشخص شدن که بطور واضح ببینیم آیتم ها به درستی و در مکان خود اضافه شدن یا خیر...
میبینید که در ابتدا با اسکرول به سمت پایین تمام آیتم ها بدرستی ایجاد و در جای خود هستند.
اما با اسکرول به سمت بالا میبینیم یهو آیتم شماره 17 قبل از آیتم شماره 1 و کلا در ستونی اشتباه ایجاد شده است و چون 6 آیتم اول بدون محتوا و پُشتِشان مشخص است براحتی میشه این اضافه شدن های عجیب رو دید.
الان منطقی توضیح دادم که جور خاصی چیزی اضافه نشده و میشه گفت روند ایجاد مشکل داره.
لطفا منطقی بفرمایید که چرا این مورد رخ میده و چطور میشه اطمینان کرد این اتفاق نمیفته ؟ (چون پشت آیتم های بعدی مشخص نیست)
سورس گویای روند عادی ساخت ویو ها است :
Private Sub pr_getItemCount As Int
Return items.Size
End Sub
Private Sub pr_onBindViewHolder(layoutitem As Object,position As Int,viewtype As Int)
Dim pnl As Panel=layoutitem
pnl.Width=30%x
pnl.Height=100dip
If position>5 Then
Dim namlbl As Label=pnl.GetView(0)
namlbl.Color=Colors.LightGray
namlbl.TextColor=Colors.red
namlbl.Gravity=Gravity.CENTER_HORIZONTAL+Gravity.CENTER_VERTICAL
namlbl.Text=position-5
End If
End Sub
Private Sub pr_onCreateViewHolder(layoutitem As Object,viewtype As Int) As Object
Dim pnl As Panel=layoutitem
Dim namlbl As Label
namlbl.Initialize("")
pnl.AddView(namlbl,2%x,0, 31%x,90dip)
Return Null
End Sub