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

اتوماتیک راندوم کردن متن از اسکول(دیتابیس) و مرتب کردن توسط کاربر


armin0000

سوال

سلام

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

مثلا در دیتا بیس داریم

شماره ۱داریم

a

b

c

d

e

f

g

شماره ۲داریم

h

i

j

k

l

بعد در برنامه یک کلیک میکنیم شماره۱

بعد ۱ بهم ریخته هست چهارتا بیشتر نشون نده از اون ۷تا

d

a

c

b

بعد کاربر با انتخاب b

برنام اعلام خطا میده... و اگه a رو انتخاب کرد

بگه درست است و اونو بالا توی ویو بالا بنویسه

بعد همیطور گزینه های دیگه

d

g

c

b

بعد bcdefgهم که انتخاب شدن ترتیبشون درست بود رفتن بالا تمام... برمیگردیم وگزینه ۲ رو انتخاب میکنیم

وگزینه های

h

i

j

k

l

رو به همون منوال بهم ریخته نشون بده...کاربر مرتبشون میکنه...

امیدوارم گرفته باشید منظور رو...

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

12 پاسخ به این سوال تاکنون داده شده است

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

سلام

بنده قبلا اسا کارو بهتون گفتم.شما باید خودتون اولویت بندی کنید.و اگه میخوایید 4 تا اولی باش و اگه توی دیتابیس هستش خوب راحت میتونید حلقتونو محدود کنید به 4 تا.و اون چهارتا رو که گرفتید رو بریزید توی یک متغییر لیست و راندوم کنید.و بریزید توی لیست ویو با یک مقدار برگشتی ( Return Value ) خب با این مقدار برگشتی میتونید خیلی راحت مرتب سازی رو انجام بدید.

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

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

7 تا استرینگ تعریف کن همه رو لود کن تو اونا بعد تو یه لیست بیارشون بعد با تابع رندوم چهار تا رو بگیر

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

ممنون اما اگه بیشتر از ۷تا بود

بازم تک تک استرینگ تعریف باید کرد....؟

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

سلام

نیازی نیست به تعریف استرینگ.

کافیه یک متغییر لیست تعریف کنی :

[/b][b]Dim ItemList As List[/b][b]

بعد بیایی با حلقه فور مثلا جهارتا آیتمو بگیری باز بریزی توی یک لیست دیگه اونجا رندوم کنید و مثلا توی لیست ویو به نمایش در بیاری.بعد دیگه هم با دستور Select Case بیا Value لیست ویو رو برگردون و شرط بزار واسش

.بازم متوجه نشدی بگو با کد بهت توضیح میدم

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

ممنون میشم اگه با کد یا یک سورس توضیح بدین .. میشه گفت مشکل بیشتر کاربرا هم باشه این...

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

سلام

یک مثال میزنیم.

بنده اول میام یک لیست ویو با یک ادیت تکست و یک باتون به دیزاینر اضافه می کنم

لیست ویو برای نشان دادن آیتم های رندوم شده.

ادیت تکست برای نشان دادن آیتم های مرتب شده.

دگمه هم برای نا مرتب کردن آیتم ها و نشون دادنشوت توی لیست ویو.

متغییر هایی که نباز دارمو مینویسم :

[b]    Dim ItemList As List[/b][b]    Private E_Txt As EditText[/b]
[b]    Private Lst As ListView[/b]
[b]    Dim SB As StringBuilder[/b]

و میام متغییر لیست و استرینگ بویلدر رو اینیشیالیز می کنیم و به متغییر لیستمون آیتم اضافه می کنیم :

[b]Sub Activity_Create(FirstTime As Boolean)[/b]
[b]    Activity.LoadLayout("MainLayout")[/b]
[b]    ItemList.Initialize[/b]
[b]    ItemList.AddAll(Array As String("a","b","c","d","e","f","g"))[/b]
[b]    SB.Initialize[/b]
[b]End Sub[/b]

بعدش میام آیتم های لیست رو می گیریم و رندومشون می کنیم ( کد مربوط به باتونمون هست) :

[b]Sub Start_btn_Click[/b]
[b]Dim r As Int[/b]
[b]Dim Get As String[/b]
[b]    For i = 0 To ItemList.Size - 1[/b]
[b]        r = Rnd(0,ItemList.Size)[/b]
[b]        Get = ItemList.Get(r)[/b]
[b]        Lst.AddSingleLine(Get)[/b]
[b]    Next[/b]
[b]End Sub[/b]

و در اینجا ما آیتم های رندوم شده رو در لیست ویو نشون دادیم.مرحله بعدی می خواییم مرتب کنیم :

[b]Sub Lst_ItemClick (Position As Int, Value As Object)[/b]
[b]    Select Value[/b]
[b]        Case "a"[/b]
[b]            SB.Append("a").Append("|")[/b]
[b]            E_Txt.Text = SB.ToString[/b]
[b]            Lst.RemoveAt(Position)[/b]
[b]        Case "b"[/b]
[b]            If E_Txt.Text.Contains("a") = True Then[/b]
[b]                SB.Append("b").Append("|")[/b]
[b]                E_Txt.Text =  SB.ToString[/b]
[b]                Lst.RemoveAt(Position)[/b]
[b]                Else[/b]
[b]                Msgbox(" کاربر گرامی کاراکتر با الویت بالاتر وجود دارد! ابتدا آن را انتخاب کنید.","")[/b]
[b]                End If[/b]
[b]        Case "c"[/b]
[b]                If E_Txt.Text.Contains("b") = True Then[/b]
[b]                SB.Append("c").Append("|")[/b]
[b]                E_Txt.Text =  SB.ToString[/b]
[b]                Lst.RemoveAt(Position)[/b]
[b]                Else[/b]
[b]                Msgbox(" کاربر گرامی کاراکتر با الویت بالاتر وجود دارد! ابتدا آن را انتخاب کنید.","")[/b]
[b]                End If[/b]
[b]        Case "d"[/b]
[b]                    If E_Txt.Text.Contains("c") = True Then[/b]
[b]                SB.Append("d").Append("|")[/b]
[b]                E_Txt.Text =  SB.ToString[/b]
[b]                Lst.RemoveAt(Position)[/b]
[b]                Else[/b]
[b]                Msgbox(" کاربر گرامی کاراکتر با الویت بالاتر وجود دارد! ابتدا آن را انتخاب کنید.","")[/b]
[b]                End If[/b]
[b]        Case "e"[/b]
[b]                    If E_Txt.Text.Contains("d") = True Then[/b]
[b]                SB.Append("e").Append("|")[/b]
[b]                E_Txt.Text =  SB.ToString[/b]
[b]                Lst.RemoveAt(Position)[/b]
[b]                Else[/b]
[b]                Msgbox(" کاربر گرامی کاراکتر با الویت بالاتر وجود دارد! ابتدا آن را انتخاب کنید.","")[/b]
[b]                End If[/b]
[b]        Case "f"[/b]
[b]                    If E_Txt.Text.Contains("e") = True Then[/b]
[b]                SB.Append("f").Append("|")[/b]
[b]                E_Txt.Text =  SB.ToString[/b]
[b]                Lst.RemoveAt(Position)[/b]
[b]                Else[/b]
[b]                Msgbox(" کاربر گرامی کاراکتر با الویت بالاتر وجود دارد! ابتدا آن را انتخاب کنید.","")[/b]
[b]                End If[/b]
[b]        Case "g"[/b]
[b]                    If E_Txt.Text.Contains("f") = True Then[/b]
[b]                SB.Append("g").Append("|")[/b]
[b]                E_Txt.Text = SB.ToString[/b]
[b]                Lst.RemoveAt(Position)[/b]
[b]                Else[/b]
[b]                Msgbox(" کاربر گرامی کاراکتر با الویت بالاتر وجود دارد! ابتدا آن را انتخاب کنید.","")[/b]
[b]                End If[/b]
[b]        End Select[/b]
[b]End Sub[/b]

خب اینک از این.

پروژشم واستون پیوست می کنم.واسه اینکه بتونید قشنگ تر و بهترش کنید باید 2 کاره دیگه رو انجام بدید:

  • باید در رندوم سازی آیتم های تکراری حذف بشن
  • کار بعدی باید آیتم های رندوم شده رو بگیریم و چک کنیم که اگه الویت قبلی یک کاراکتر وجود نداشت کاراکتر کلیک شده بتونه بره به لیست مرتب سازی

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

رمز فایل : basic4android.org

موفق و موید باشید

List Random(www.basic4android.org).rar

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

تشکر...

یه نگاه بندازم ببینم چچوره

با دیتابیس تطبیقش هم بدم..

باید در رندوم سازی آیتم های تکراری حذف بشن

کار بعدی باید آیتم های رندوم شده رو بگیریم و چک کنیم که اگه الویت قبلی یک کاراکتر وجود نداشت کاراکتر کلیک شده بتونه بره به لیست مرتب سازی

اینهارو هم لحاظ کنم.. چون مشکل پیش میاد که راندوم شده باشه و گزینه قبل از اون نباشه نمیشه لیست رو مرتب کرد.. ک بشه لیست رو مرتب کرد.

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

این واسه فقط واسه abcefgهست که خودمون بهش دادیم.. اما وقتی یه دیتابس باشه کلی فیلد اونوقت دیگه کار سخت میشه... یه کد باشه که اون ستون های دیتا بیس دارای آیدی هستن.. خودش از روی آیدی فیلد ها بفهمه که قبل از اون کارکتر با اولویت بالاتر وجود داره.. نخوای تک تک بنویسیم aو bو...

۴تا هم بیشتر نشون نده...

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

سلام

خب یه راهنماییت که خودم هنوز تستش نکردم و به ذهنم خطور کرد.

ببینید شما بیایید همین abcdefg و یا هر چقد که خودتون دوست دارید وارد کنید.

برید یک دیتابیس بسازید با 2تا فیلد یکی واسه آیدی هر کاراکتر و فیلد ایدی رو Primary Key قرار بدید.

اطلاعات مورد نیازتون رو وارد دیتابیس کنید.تا اینجا شد واسه دیتابیس.

حالا اطلاعات دیتابیس رو با آیدی و کاراکتر بگیرید و توی یک لیست ویو قرار بدید.و آیتم ها رو به صورت مثلا AddSingleLine2 یا AddTwoLines2 وارد کن یعنی هر آیتم لیست رو یک مقداری بهش بده.و در رویداد آیتم کلیک بیا کل آیتم هارو بگیر و با آیتم کلیک شده مقایسه کن که کوچیکتر از خودش وجو داره یا ن و ترتیب بندی کن.

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

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

سلام مثل این که من جواب این رو دادم انجمن رو عوض کردین ـ پـاک شد جوابم!!

من این کدارو ویرایش کردم دیتابیسشو ساختم

کد دیتابیسشم قرار دادم که از اونجا بگیره

نمیدونم چجوری فقط ۴تارو بیشت

راندوم نکنه

از این لیست دیتا بیس ۲۶ تایی میخوام ۴تای اول رو بیشتر راندوم نکنه

نکنه با کلیک

حروف تکراری هم نباشه

بعد که توسط کاربر مرتب شد

بعد با کلیک دوباره ۴تای بعد رو راندوم کنه

مثل قبل همینجور ادامه تا ۲۶ تا تکمیل بشه

آ ـپـکردم

ممنون یه نگاه بندازین تکمیله دیگه

RANDOMIZE.zip

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

بایگانی شده

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

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

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