دوره مجازی اندروید (جلسه 12): آشنایی با ViewPager و TabLayout



visibility  
mode_comment   ۴۹

به نام خدا، دوستان سلام. توی این جلسه به معرفی viewpager و tablayout می پردازیم.برای پیاده سازی viewpager دوباره با recyclerview و fragment ها کار خواهیم کرد تا هم اینکه مروری بشه، همین که بیشتر کاربردشون رو درک بکنید.

مطالب مطرح شده در این جلسه عبارتند از :

 

  • ViewPager چیست؟
    • FragmentPagerAdapter چیست؟
    • FragmentStatePagerAdapter چیست؟
    • ایجاد Adapter برای ViewPager
    • متصل کردن Adapter به ViewPager
  • TabLayout چیست؟
    • متصل نمودن Tablayout به ViewPager
    • نمایش متن در Tablayout
info توجه

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

ثبت نام در آموزش برنامه نویسی اندروید

comment دیدگاه کاربران
Mr abbas replyپاسخ

بسیار عالی 😀
😛

جعفر پیشدادی replyپاسخ

با سلام وتشکر… سئوال داشتم اولا چطوری میشه فونت پبش فرض برای اپ تعریف کرد که برای هر قسمت نیاز یه ست کردن نیاشه مثلا فونت ب یکان
پبشنهاد میشه پایان هر مبحث چند نمونه اپلیکیشن مهم ویا …مختصر در مورد موارد بکار برده شده در چند دقیقه تجزیه تحلیل شود…تا ما با تکنولوزی بکار رفته *اشنا شویم

سعید شاهینی

سلام، برای این کار باید view سفارشی برای خود بسازید و از اون استفاده بکنید. به عنوان مثال برای text view ها باید کلاس textview رو extend بکنید و فونت رو روی اون ست بکنید و داخل لایوت ها از کلاسی که خودتون ساختید استفاده کنید.

مرتضی replyپاسخ

من احساس میکنم در درک Event ها و دستور های set یا get یکم سردرگم شدم ایا منبعی وجود داره چه انگلیسی یا فارسی که این دستورات و رویداد ها رو همرا با زمان استفاده و عملکردشون نوشته باشه ؟ که تمرین و تکراری بشه مطالعه اونها !!!

سعید شاهینی

سلام، در جلسات بعدی مثال های بیشتری حل می کنیم، تا به خوبی درک کنید. این مباحث در گذر زمان قابل درک خواهند شد.

مرتضی

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

سعید شاهینی

خواهش می کنم، حتما در طی جلسات زمان استفاده از مفاهیم، یادآوری خواهم کرد.

ali rahmanian replyپاسخ

سلام
لطفا سرعت انتشار مطالب رو بیشتر کنید،و اینکه حتما کار با سنسورها و سخت افزار مثل وای فای،بلوتوث،دوربین و میکروفون هم تو برنامه آموزشی بذارید و البته ارسال و دریافت اس ام اس و تماس
آموزش شما رو خیلی جدی و دقیق دنبال میکنیم خدا قوت، امیدوارم تمام تلاشتون واسه تکمیل مطالب تا سطح حرفه ای انجام بدید،موفق باشید

لقمان آوند

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

mamad dagger replyپاسخ

سلام لطفا ساخت کتاب الکترونیکی متریال هم یاد بدین تو این دوره

سعید شاهینی

سلام، تمامی مفاهیم متریال دیزاین آموزش داده خواهند شد.

hamidniakan replyپاسخ

سلام و خسته نباشید من اموزش اندروید رو خرید فقط توانستم 12 قسمت یعنی آموزش view pager رو دانلود کنم بقیش چه طوری می تونم دانلود کنم؟

لقمان آوند

این دوره در حال برگزاری هست و 12 جلسه اون منتشر شده. هفته ای دو جلسه منتشر میشه که باید بعدا و پس از انتشار دانلود کنید

Ali Movahedi replyپاسخ

سلام استاد میشه بگین چطور می تونم چنین لیوت رو بسازم؟
http://8pic.ir/images/v2xo2xw58fjy20c8qwbu.png

سعید شاهینی

سلام، با استفاده از gridlayout به راحتی می تونید این لایوت رو پیاده سازی کنید.

Emad Haraji replyپاسخ

سلام
ممنون از آموزشهاتون
یه درخواستی داشتم
درک مفهومی اینکه الان چه اتفاقی داره می افته و چی به کجا داره میره یه کم پیچیده و سخت شده
میشه لطف کنید به صورت شماتیک مسسیری که دیتا ها طی میکنند رو توضیح بدین
مثلا دیتا ها از کجا به کجا میروند
چطوری نمایش داده میشوند
چظوری خوانده میشوند
و مسیر رو یه طور ساده تر توضیح بدین
برای ما که تازه کار هستیم یه مقداری درکش سخت شده که مثلا چرا الان دارید یه قسمت آداپتور میسازید
بعد ایت آداپتور یهو کچا میره
یه کم پیچیده شده نیاز به توضیح شماتیک تر و باز تر داره قبل از آموزشتون
ممنون میشم

سعید شاهینی

سلام، خواهش می کنم. باشه حتما نکته ای که فرمودید رو هر جا لازم بود، راجع بهش صحبت می کنم.

ح حسین replyپاسخ

با سلام

1- لطفا یک تقویم شمسی خوب که بتونیم توی برنامه ها ازش استفاده کنیم معرفی کنید ؟

2- یک کتابخانه خوب برای تبدیل تاریخ های شمسی و میلادی و برعکس ؟

3-شما بیشتر با RelativeLayout کار میکنید ، لطفا در مورد کنترلهای دیگه در قسمت Layouts هم توضیح بدین و کاربرد هر کدوم کجاست ؟

4-برای اینکه برنامه ما در همه موبایلها با اندازه های متفاوت با شکل مناسب و یکسانی نمایش داده بشه باید چکاری انجام داد ؟

شما در مورد 9pach و یا سایر موارد که بروز و این کار رو بهتر انجام بده ، چه پیشنهادی دارید ؟

سعید شاهینی

سلام،
1- https://github.com/ebraminio/DroidPersianCalendar
2- همون پروژه شامل این مورد هم میشه
3- توی جلسات مربوط به رابط کاربری به طوری کامل آموزش داده شده
4- پاسختون رو توی دیدگاه دیگه دادم
5- آموزش داده نمی شه این مورد ولی می تونید از سایت https://romannurik.github.io/AndroidAssetStudio/nine-patches.html برای ساخت 9patch استفاده کنید.

رامین رامین replyپاسخ

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

سعید شاهینی

سلام، ممنونم لطف دارید. در حال حاضر دوره خیلی طولانی شده و احتمال اینکه مطلب جدید اضافه بشه خیلی کم هست. ولی احتمال داره در دوره های کوتاه مطالب مرتبط تر با سخت افزار رو آموزش بدهیم.
در مورد سرعت انتشار هم من واقعا سعیم رو می کنم، اما به دلیل اینکه می خوام بهترین کیفیت آموزش رو داشته باشیم گاهی انتشار جلسات طول می کشه که من عذرخواهی می کنم. ولی مطمئن باشید در نهایت به نفع دانشجویان خواهد بود.

hamidreza khajeh replyپاسخ

سلام استاد خسته نباشید
آموزشا و توضیاحتتون خیلی عالیه دستتون درد نکنه

منم مثل بقیه دوستان یکم برام سنگین هست خصوصا این دو جلسه آخر خیلی پیجیده تر شده فک کنم پیشنهاد اون دوستمون ک گفتن خلاصه کارایی ک انجام شده رو بصورت شماتیک نشون بدید چیز بدی نباشه

الان بعد از اینکه پرژه تکمیل شدش یه مرور کلی داشته باشید و بگید صورت یه نمودار یا همچین چیزی و بصورت خلاصه مثلا بگید ک اداپتر این وسط کارش چیه(مثلا فلان چیز رو به فلان چیز مرتبط میکنه) و چرا ما اینجا دوتا اداپتر استفاده کردیم
این وسط یا فرگمنت ها همینطور و موارد اینطوری که آخر جلسه هم یه مروری بشه و هم ما بفهمیم چرا باید مثلا این کار و اون کار رو بکنیم(امیدوارم منظورم رو درست رسونده باشم)

بازم ممنون از شما

سعید شاهینی

سلام، در جلسات بعدی چندین بار این مطالب رو آموزش دادم دوباره و راجع بهشون توضیحات کامل تری دادم، مطمئناً در جلسات بعدی گنگ بودن مسائل بر طرف خواهد شد.

hamidreza khajeh

دستتون درد نکنه،خیلیم عالی
خدا خیرتون بده

حامد سبزیان replyپاسخ

سلام خسته نباشید
بعضی از ویدئو ها مشکل دارن و قطع میشن
مثل همین جلسه دوازده
شش هفت دقیقه از ویدئو که میره بعدش قطع میشه 🙁 🙁 🙁
چی کار کنم ؟
به دادم برسید
با پلیرهای دیگه هم باز کردم
تو سیستم های دیگه هم امتحان کردم

سعید شاهینی

سلام، اگه از مرورگر کروم استفاده می کنید، با استفاده از ctrl+shift+R صفحه را رفرش کنید تا مشکل بر طرف بشه.

حامد سبزیان replyپاسخ

حل شد مشکل ویدئو

ppp replyپاسخ

جهت ارسال نظر دیگر در این صفحه سیستم ممکنه نظر قبلی رو اسپم نشون بده و ممکنه اقا شاین نتونید بخونید منم یه عکس از نظر قبلی میفرستم و ادامه مشکل میگم
http://s8.picofile.com/file/8275383534/AM.png
متن{سلام استاد
استاد برای من یک مشکل setupWithViewPager هست که اندروید استودیو اونو نمیشناسه حتی دیزاینر اونو دانلود کردم و حتی دقیقا کد های شما رو کپی کردم اما نمیدونم معنی این ارور چیه
http://s9.picofile.com/file/8275378276/22.png
http://s8.picofile.com/file/8275378934/1v1.png
http://s8.picofile.com/file/8275378400/111.png

راستی استادخیلی خوب میشه یک جلسه فقط در مورد ارور ها حرف بزنید مثل اقا اوند که در دوره php یک جلسه رو فقط به ارور ها اختصاص داد .}
————————
ادامه نظر
استاد اینم از عکس اندروید مانیفست
http://s9.picofile.com/file/8275383142/mi.pn

سعید شاهینی

سلام، شما به جای کلاس TabLayout کلاس جدول یعنی TableLayout رو داخل جاوا ساختید!

theking replyپاسخ

باسلام خدمت استاد شاهینی عزیز!در قسمت viewpager تغذیه متفاوت فرگمنت ها با داده های متفاوت رو که فرمودین در آموزش بعدها کامل می شود رو توضیح ندادین استاد!ای کاش یه بخش کوچکی برای این قسمت هم بگذارید!باتشکر!

سعید شاهینی

سلام٬ بله داخل لیست آموزش ها قرار دادم٬ اردیبهشت ماه دوره آپدیت می شه و این آموزش رو هم یادداشت کردم که قرار بدم

Rochezto Delaporana replyپاسخ

سلام استاد شاهینی

بنده مطالب این جلسه رو انجام دادم. در آخر شکل اکتیویتی بوتیک من به این شکل در آمد:
http://s1.picofile.com/file/8287060968/malehman.PNG

به غیر از ردیف اول بقیه ردیف ها نیستن. اینم فایل جاوا و xml مربوط به پروژه:
java

xml:

http://s4.picofile.com/file/8287062334/xml.PNG

اگر به کد مربوط به قسمت های دیگه هم نیاز هست بفرمایید اونهارو هم می فرستم.

با تشکر

سعید شاهینی

سلام٬ متاسفانه عکس هاتون باز نمی شن. به ایمیلم فایل xml مربوط به layout سطر رو ارسال کنید.

مسعود معینی replyپاسخ

سلام

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

سعید شاهینی

سلام٬ بله اما viewpager کارهایی دیگه ای هم انجام می ده مثل مدیریت lifecycle فرگمنت ها. مثلا زمانی که تعداد فرگمنت های زیاد باشه فقط مقدار مشخصی از اون ها رو داخل حافظه نگه می داره.

Hamid Azhdari replyپاسخ

سلام و خسته نباشید استاد
من تمامی مراحل رو 3 بار یعنی از اول ساخت یک layout برای recycle view پیش رفتم تا آخر این جلسه و هر بار موقع اجرای نهایی بدون نشون دادن یه ارور توی android studio برنامه توی ماشین مجازی بعد از نشون دادن یه صفحه سفید می نوشت متاسفم برنامه متوقف شد و می پرید بیرون
امروز بعد کلی مغز ترکوندن رفتم یه اندروید بالاتر یعنی اندروید 7 و برنامه اجرا شد بدون هیچ مشکلی

حالا مشکل من اینه که من اول کار api 17 رو انتخاب کردم ولی الان باید حتمی اندروید 7 باشه تا اجرا بشه
ممنون میشم بگید مشکل کارم کجاست
خودم فکر می کنم از قسمتی که depencnsiy رو انتخاب کردم باشه چون بعد از گرفتن liberary بصورت دستی ورژن liberary رو به ورژن compile خودم تغییر دادم.

قسمت هاییrecycle و design بعد از اضافه شدن خودشون 26-0-0-alpha بود که خودم مجبور شدم تغییرش بدم

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

سعید شاهینی

سلام٬ احتمالا از متدی استفاده شده داخل کدهاتون که داخل api 17 کار نمی کنه. از خطایی که می ده اسکرین شات بگیرید و ارسال کنید تا دقیق تر بتونم راهنماییتون کنم.

مهدی پاکروان replyپاسخ

سلام
واقعا از این دوره ی خوب ممنونم من تا حالا 3 تا دوره از سایت های دیگه خریدم ولی واقعا آموزش های سایت شما با بقیه سایت ها فرق داره خیلی عالیه و کاربردی .
به همه ی دوستام که میخوان آموزش جدیدی بخرن حتما پیشنهاد میکنم ممنونم

سعید شاهینی

سلام، خیلی ممنونم، شما لطف دارید. خوشحالم که اینطوره

حامد replyپاسخ

ارور دیگه ای هم دارم که تو صفحه xml هست
Failed to load AppCompat ActionBar with unknown error. (3 similar errors not shown)
بخاطر این ارور
Preview اپ رو ندارم

سعید شاهینی

داخل فایل styles.xml برید و theme رو AppCompat.Theme.Light.NoActionBar رو انتخاب کنید ببینید درست می شه یا نه

حامد replyپاسخ

چطور می توان از یک Fragment یک activity دیگری را باز کرد ؟؟

سعید شاهینی

سلام، از متد startActivity باید استفاده کنید و اکتیویتی مقصد رو مشخص کنید

سیدسبحان صانعی replyپاسخ

سلام من وقتی میخام پروژمو تست کنم این پیام برا میاد باید چیکار کنم؟؟؟
Error:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31
is also present at [com.android.support:recyclerview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1).
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:25:5-27:34 to override.

سعید شاهینی

سلام، دلیلش تداخل manifest لایبرری هایی که به پروژه اضافه کردید با manifest پروژه خودتون هست. بایستی ورژن لایبرری recyclerview با appcompat داخل build.gradle یکی باشه، ورژن recyclerview رو به ۲۵.۳.۱ تغییر بدید مشکل حل می شه.

Hadi replyپاسخ

سلام. دو تا سوال داشتم
1. وقتی TabLayout رو در اکتیویتی میگیرم پروژه ران نمیشه و میگه متاسفانه متوقف شد. توی بخش Android Monitor اروری نمیبینم که بشه برا شما بفرستم. چه چیزی بفرستم که بشه اشکال رو ازش متوجه شد؟
2. پروژه این جلسه رو وقتی با اندروید استدیو خودم (ورژن 2.3.3) باز میکنم فایل های پروژه رو نمیشناسه و نوار زرد رنگی بالای صفحه میاد و مینویسه Project SDK is not defined. کنارش هم نوشته setup SDK و وقتی روش میزنم میگه SDK رو انتخاب کن و بعدش هم هیچ اتفاقی نمیوفته. مشکل رو چطور باید برطرف کنم؟
تشکر

Hadi

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

10-17 08:55:44.763 19210-19210/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:44.763 19210-19210/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:45.036 19229-19229/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:45.036 19229-19229/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:47.767 19243-19243/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:47.767 19243-19243/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:47.968 19257-19257/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:47.968 19257-19257/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:48.302 19272-19272/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:48.302 19272-19272/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:48.542 19287-19287/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:48.542 19287-19287/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:49.012 19301-19301/? E/cutils-trace: Error opening trace file: Permission denied (13)
10-17 08:55:49.288 1784-3148/com.google.android.gms.persistent E/NetworkScheduler.SR: Unrecognised action provided: android.intent.action.PACKAGE_REMOVED
10-17 08:55:49.621 19331-19331/? E/memtrack: Couldn’t load memtrack module (No such file or directory)
10-17 08:55:49.621 19331-19331/? E/android.os.Debug: failed to load memtrack module: -2
10-17 08:55:49.695 19344-19344/? E/libprocessgroup: failed to make and chown /acct/uid_10059: Read-only file system
10-17 08:55:50.102 19344-19344/com.example.hadi_lenovo.project1 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                  Process: com.example.hadi_lenovo.project1, PID: 19344
                                                                                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hadi_lenovo.project1/com.example.hadi_lenovo.project1.view.activity.BooticActivity}: java.lang.ClassCastException: android.widget.TableLayout cannot be cast to android.support.design.widget.TabLayout
                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                                                                                      at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                      at android.os.Looper.loop(Looper.java:135)
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                                      at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                                                                                   Caused by: java.lang.ClassCastException: android.widget.TableLayout cannot be cast to android.support.design.widget.TabLayout
                                                                                      at com.example.hadi_lenovo.project1.view.activity.BooticActivity.onCreate(BooticActivity.java:17)
                                                                                      at android.app.Activity.performCreate(Activity.java:5990)
                                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                                                                                      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                      at android.os.Looper.loop(Looper.java:135) 
                                                                                      at android.app.ActivityThread.main(ActivityThread.java:5254) 
                                                                                      at java.lang.reflect.Method.invoke(Native Method) 
                                                                                      at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
10-17 08:55:50.122 1171-1171/? E/EGL_emulation: tid 1171: eglCreateSyncKHR(1865): error 0x3004 (EGL_BAD_ATTRIBUTE)
سعید شاهینی

سلام،
پاسخ 1: داخل تب Logcat (پایین اندروید استودیو) می تونید نوشته هایی رو ببینید که متن ارور ها داخلش با رنگ قرمز نمایش داده می شن.
پاسخ 2: باید روی لینک setup sdk کلیک کنید و مسیر پوشه sdk خودتون رو بهش بدید

سید محمد وجدانی زاده replyپاسخ

سلام خسته نباشید من در آخر اموزش
اخرین بخش کد نویسی متد getSupportFragmentManager رو ندارم
لطفا راهنمایی کنید ممنون

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.