بنده یه پروژه دارم داخل یکی از اکتیویتی ها لیست ویو قرار داره که اطلاعات رو از دیتابیس انلاین دریافت میکنه و سپس با کلیک روی هر ایتم در اکتیویتی جدید ویو های زیر لود میشه :
لیبل های زیر از طریق دیزاینر اضافه میشه :
lb_title , lbcat , lb_user
و لیبل و ویوهای زیر از طریق کد نویسی در اسکرول ویو اضافه میشه :
lb_text , ed_text , bt_send , commentlistview ,
کارایی این اکتیویتی هم به این صورت هستش که متن ایتم های لیست ویو اکتیویتی قبل رو نشون میده که بهمراه اون : عنوان - فرستنده - دسته بندی نیز نمایش داده میشود. همچنین در قسمت انتهایی متن تکست یک عدد ادیت تکست و باتن جهت ارسال نظرات به این مطلب و در زیر این دو یک عدد لیست ویو جهت نمایش نظرات ارسالی به متن تکست قرار میگیره.
در ابتدا بنده همه ویو ها رو از دیزاینر تعریف کردم و درصدی از صفحه رو به هرکدوم اختصاص دادم اما چیز جالبی نبود میخواستم از قسمت متن تکست به بعد داخل اسکرول ویو لود بشه که نیاز نباشه اندازه ها رو محدود به ارتفاع صفحه قرار بدم.
برای همین اومدم متن تکست رو که داخل لیبل (lb_text) لود میشه رو به اکتیوتی اضافه کردم تا اینجاش خوب پیش میره اما همین که میخوام بعد لیبل تکست ایدت تکست و باتن و لیست ویو رو قرار بدم هنگام ران برنامه وقتی رو ایتم لیست ویو کلیک میشه مشخصات فرستنده و متن نشون داده میشه اما به بقیه ویو ها که میرسه اخطار زیر رو میده :
show_eideh_jobdone (java line: 797)
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3562)
at android.view.ViewGroup.addView(ViewGroup.java:3415)
at android.view.ViewGroup.addView(ViewGroup.java:3391)
at anywheresoftware.b4a.objects.PanelWrapper.AddView(PanelWrapper.java:65)
at b4a.example.show_eideh._jobdone(show_eideh.java:797)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:191)
at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1154)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5019)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
کد های استفاده شده تو اکتیویتی هم اینا هستن :
Sub Activity_Create(FirstTime As Boolean)
lb_text.Initialize("")
lb_text.TextColor = Colors.White
lb_text.Gravity = Gravity.RIGHT
lb_text.Typeface = font
lb_text.TextSize = 18
lb_title.Typeface = font
lb_cat.Typeface = font
lb_user.Typeface = font
bt_send.Initialize("")
ed_text.Initialize("")
bt_send.Typeface = font
ed_text.Typeface = font
ed_text.TextSize = 14
ed_text.TextColor = Colors.Red
ed_text.Hint = "پیام خود را بنویسید..."
bt_send.Text = "ارسال"
bt_send.TextColor = Colors.White
bt_send.Color = ac.GetThemeAttribute("colorAccent")
bt_send.TextSize = 12
CommentListView.Initialize("CommentListView")
CommentListView.Color = Colors.ARGB(100,181,108,0)
user_name = C1.GetString("Name_Family")
lb_Sender.Initialize("")
lb_Sender.Text = user_name
GetData("get_comment","http://exe.ir/mysql_b4a/get_news.php","SELECT * FROM comment ORDER BY id DESC WHERE cod = " & hime.meghdar ,False,Null)
GetData("get_news","http://exe-coding.ir/mysql_b4a/get_news.php","SELECT * FROM tbl_news WHERE id = " & home.meghdar ,True,"صبر کنید...")
auto_reload.Initialize("auto_reload",15000)
auto_reload.Enabled = True
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub JobDone(job As HttpJob)
If job.Success Then
Dim res As String
res = job.GetString
Dim parser As JSONParser
parser.Initialize(res)
If job.JobName = "get_news" Then
Dim dat As List
dat = parser.NextArray
For i = 0 To dat.Size -1
Dim m As Map
m = dat.Get(i)
lb_title.Text = m.Get("title")
lb_user.Text= m.Get("user")
lb_cat.Text = m.Get("cat")
id = m.Get("id")
lb_text.Text = m.Get("text")
Next
SV.Panel.AddView(lb_text,0,1%x,93%x,50%y)
lb_text.Height = stu.MeasureMultilineTextHeight(lb_text,lb_text.Text) + 2%y
SV.Panel.AddView(bt_send,0,lb_text.Height + 2%y , 23%x , 8%y )
SV.Panel.AddView(ed_text,23.1%x , lb_text.Height + 1%y , 100%x , 10%y )
End If
Dim res1 As String
res1 = job.GetString
Dim parser1 As JSONParser
parser1.Initialize(res1)
CommentListView.Clear
If job.JobName = "get_comment" Then
Dim view As List
view = parser1.NextArray
For i = 0 To view.Size -1
Dim m1 As Map
m1 = view.Get(i)
CommentListView.AddTwoLines2(" " & m1.Get("sender") & " : " , " " & m1.Get("comment") , m1.Get("id") )
Next
SV.Panel.AddView(CommentListView,0,lb_text.Height + 12%y,100%x,CommentListView.Height)
SV.Panel.Height = CommentListView.Height + 3%y
End If
If job.JobName = "add_comment" Then
ProgressDialogHide
ed_text.Text = ""
Else
Log(job.ErrorMessage)
End If
End If
End Sub
Sub GetData(JobName As String,Link As String,Query As String,Progress As Boolean,ProgressText As String)
Dim job1 As HttpJob
job1.Initialize(JobName,Me)
job1.PostString(Link,Query)
End Sub
حالا نمیدونم ایا در کل تو بیسیک امکان این نیست چند تا ویو با هم تو اسکرول ویو لود بشه یا اینکه طرز کار من اشکال داره در هر صورت ممنون میشم جوابمو بدید.
سوال
mja89 4
سلام دوستان
بنده یه پروژه دارم داخل یکی از اکتیویتی ها لیست ویو قرار داره که اطلاعات رو از دیتابیس انلاین دریافت میکنه و سپس با کلیک روی هر ایتم در اکتیویتی جدید ویو های زیر لود میشه :
لیبل های زیر از طریق دیزاینر اضافه میشه :
lb_title , lbcat , lb_user
و لیبل و ویوهای زیر از طریق کد نویسی در اسکرول ویو اضافه میشه :
lb_text , ed_text , bt_send , commentlistview ,
کارایی این اکتیویتی هم به این صورت هستش که متن ایتم های لیست ویو اکتیویتی قبل رو نشون میده که بهمراه اون : عنوان - فرستنده - دسته بندی نیز نمایش داده میشود. همچنین در قسمت انتهایی متن تکست یک عدد ادیت تکست و باتن جهت ارسال نظرات به این مطلب و در زیر این دو یک عدد لیست ویو جهت نمایش نظرات ارسالی به متن تکست قرار میگیره.
در ابتدا بنده همه ویو ها رو از دیزاینر تعریف کردم و درصدی از صفحه رو به هرکدوم اختصاص دادم اما چیز جالبی نبود میخواستم از قسمت متن تکست به بعد داخل اسکرول ویو لود بشه که نیاز نباشه اندازه ها رو محدود به ارتفاع صفحه قرار بدم.
برای همین اومدم متن تکست رو که داخل لیبل (lb_text) لود میشه رو به اکتیوتی اضافه کردم تا اینجاش خوب پیش میره اما همین که میخوام بعد لیبل تکست ایدت تکست و باتن و لیست ویو رو قرار بدم هنگام ران برنامه وقتی رو ایتم لیست ویو کلیک میشه مشخصات فرستنده و متن نشون داده میشه اما به بقیه ویو ها که میرسه اخطار زیر رو میده :
show_eideh_jobdone (java line: 797) java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addViewInner(ViewGroup.java:3562) at android.view.ViewGroup.addView(ViewGroup.java:3415) at android.view.ViewGroup.addView(ViewGroup.java:3391) at anywheresoftware.b4a.objects.PanelWrapper.AddView(PanelWrapper.java:65) at b4a.example.show_eideh._jobdone(show_eideh.java:797) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at anywheresoftware.b4a.BA.raiseEvent2(BA.java:191) at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1154) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5019) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
کد های استفاده شده تو اکتیویتی هم اینا هستن :
Sub Activity_Create(FirstTime As Boolean) lb_text.Initialize("") lb_text.TextColor = Colors.White lb_text.Gravity = Gravity.RIGHT lb_text.Typeface = font lb_text.TextSize = 18 lb_title.Typeface = font lb_cat.Typeface = font lb_user.Typeface = font bt_send.Initialize("") ed_text.Initialize("") bt_send.Typeface = font ed_text.Typeface = font ed_text.TextSize = 14 ed_text.TextColor = Colors.Red ed_text.Hint = "پیام خود را بنویسید..." bt_send.Text = "ارسال" bt_send.TextColor = Colors.White bt_send.Color = ac.GetThemeAttribute("colorAccent") bt_send.TextSize = 12 CommentListView.Initialize("CommentListView") CommentListView.Color = Colors.ARGB(100,181,108,0) user_name = C1.GetString("Name_Family") lb_Sender.Initialize("") lb_Sender.Text = user_name GetData("get_comment","http://exe.ir/mysql_b4a/get_news.php","SELECT * FROM comment ORDER BY id DESC WHERE cod = " & hime.meghdar ,False,Null) GetData("get_news","http://exe-coding.ir/mysql_b4a/get_news.php","SELECT * FROM tbl_news WHERE id = " & home.meghdar ,True,"صبر کنید...") auto_reload.Initialize("auto_reload",15000) auto_reload.Enabled = True End Sub Sub Activity_Resume End Sub Sub Activity_Pause (UserClosed As Boolean) End Sub Sub JobDone(job As HttpJob) If job.Success Then Dim res As String res = job.GetString Dim parser As JSONParser parser.Initialize(res) If job.JobName = "get_news" Then Dim dat As List dat = parser.NextArray For i = 0 To dat.Size -1 Dim m As Map m = dat.Get(i) lb_title.Text = m.Get("title") lb_user.Text= m.Get("user") lb_cat.Text = m.Get("cat") id = m.Get("id") lb_text.Text = m.Get("text") Next SV.Panel.AddView(lb_text,0,1%x,93%x,50%y) lb_text.Height = stu.MeasureMultilineTextHeight(lb_text,lb_text.Text) + 2%y SV.Panel.AddView(bt_send,0,lb_text.Height + 2%y , 23%x , 8%y ) SV.Panel.AddView(ed_text,23.1%x , lb_text.Height + 1%y , 100%x , 10%y ) End If Dim res1 As String res1 = job.GetString Dim parser1 As JSONParser parser1.Initialize(res1) CommentListView.Clear If job.JobName = "get_comment" Then Dim view As List view = parser1.NextArray For i = 0 To view.Size -1 Dim m1 As Map m1 = view.Get(i) CommentListView.AddTwoLines2(" " & m1.Get("sender") & " : " , " " & m1.Get("comment") , m1.Get("id") ) Next SV.Panel.AddView(CommentListView,0,lb_text.Height + 12%y,100%x,CommentListView.Height) SV.Panel.Height = CommentListView.Height + 3%y End If If job.JobName = "add_comment" Then ProgressDialogHide ed_text.Text = "" Else Log(job.ErrorMessage) End If End If End Sub Sub GetData(JobName As String,Link As String,Query As String,Progress As Boolean,ProgressText As String) Dim job1 As HttpJob job1.Initialize(JobName,Me) job1.PostString(Link,Query) End Sub
حالا نمیدونم ایا در کل تو بیسیک امکان این نیست چند تا ویو با هم تو اسکرول ویو لود بشه یا اینکه طرز کار من اشکال داره در هر صورت ممنون میشم جوابمو بدید.
لینک ارسال
به اشتراک گذاری در سایت های دیگر
3 پاسخ به این سوال تاکنون داده شده است
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.