رفتن به مطلب
  • 0

مشکل افزودن چند ویو به اسکرول ویو


mja89

سوال

سلام دوستان

بنده یه پروژه دارم داخل یکی از اکتیویتی ها لیست ویو قرار داره که اطلاعات رو از دیتابیس انلاین دریافت میکنه  و سپس با کلیک روی هر ایتم در اکتیویتی جدید ویو های زیر لود میشه :

لیبل های زیر از طریق دیزاینر اضافه میشه :

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 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

 این بخش رو مثال میزنم

		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

به این.

		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.initialize("")
				' بقیه هم به همین صورت باید ساخته بشه.

				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")
		

			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 )

			Next
					

		End If

 

 

 

خیلی راحت با نرم افزار (چاقو همه کاره دیزاینر) ، میتونید آیتم های اسکرول ویو رو بسازید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون از راهنماییت عزیز اما :

lbl_title -cats-user

رو از طریق دیزاینر اد کردم و خارج از اسکرول ویو هستند تنها ویو هایی که گفتن رو داخل اسکرول ویو گذاشتم که عمل نمیکنن.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

مشکل حل شد همه کد ها رو برون دیزاینر به اسکرول ویو دادم اکی شد .

حالا چرا خدا داند؟؟؟؟

مشکل دیگه ای دارم اینه که راهی هست بشه اندازه لیست ویو رو بسته به ایتم هاش تعریف کرد مثلا اگه لیست ویو یه دونه ایتم داشت اندازه همون باشه صدتا داشت هم با همون اندازه رو داشته باشه.

چون من لیست ویو رو داخل اسکرول ویو لود کردم برای مشخص کردن ارتفاع لیست ویو مشکل دارم و مثل کتابخانه stringuntil براش ندیدم که اندازه خودکار لیست ویو رو دربیاره و به ناچار مثلا 50 درصد بهش ارتفاع میدم حالا اگه لیست ویو یه دونه ایتم داشت همون 50 درصد رو داره اگه 100 تا داشت هم همون یه درصد باز.

واسه این مشکل چه راهی پیشنهاد دارید.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...