Event Handling ؛ کنترل رویدادها در اندروید
در این فصل با نحوه ارتباط عناصر داخل اکتیویتی مانند دکمه ها با کلاس جاوا و کنترل رویدادها در اندروید و تعدادی موارد تکمیلی آشنا می شویم که شامل مباحث زیر می باشد.
- آشنایی با فایل AndroidManifest.xml
- آشنایی با انواع کامپوننت ها
- معرفی رویدادها در برنامه نویسی
- معرفی کنترل کننده ها و شنونده های رویدادها
- نحوه کنترل رویداد عناصر موجود در اکتیویتی
- جلوگیری از تخریب اکتیویتی هنگام چرخش صفحه نمایش و دیوایس
- آشنایی با تگ ScrollView برای اضافه کردن قابلیت اسکرول به اکتیویتی
این جلسه در قالب PDF و در ۴۰ صفحه تهیه شده که در ادامه چند صفحه ابتدایی را مشاهده میکنید:
به نام خدا. قبل از شروع مبحث کنترل رویدادها به معرفی یکی از مهم ترین بخش های اپلیکیشن اندرویدی می پردازیم :
فایل AndroidManifest.xml :
به طور کلی، اطلاعات اصلی و مهم اپلیکیشن درون این فایل نگهداری می شود. یک پروژه جدید با نام Events و API9 ساختیم. از مسیر manifests فایل AndroidManifest.xml را باز می کنیم :
در خط ۳ نام پکیج قرار گرفته است.خطوط ۷ و ۸ به ترتیب مربوط به آیکون و نام اپ ما می باشد که در لیست اپلیکیشن های نصب شده روی دیوایس نمایش داده می شود. در خط ۱۱ مشاهده می کنید اکتیویتی MainActivity تعریف شده. به همین صورت هر اکتیویتی که بخواهیم به پروژه اضافه کنیم باید درون مانیفست نیز اضافه شود. اطلاعات دیگر مانند تِم (قالب) اپلیکیشن، مجوزها، کامپوننت ها و … همگی درون این فایل تعریف می شوند.
Theme (تم) مربوط به ظاهر برنامه می شود که در مباحث آینده به آن می پردازیم.
از مجوزها می توانیم به مجوز دسترسی اپلیکیشن به دوربین، مخاطبین (دفترچه تلفن)، میکروفون، ارسال SMS، و … اشاره کرد. حتما هنگام نصب یک اپلیکیشن روی گوشی اندرویدی خود، با لیستی شامل Permission های مختلف مواجه شده اید که سیستم عامل از شما می خواهد با آگاهی از دسترسی هایی که این اپ می تواند روی تلفن هوشمند شما داشته باشد اقدام به نصب نمائید. برای مثال شما قصد ساخت اپلیکیشنی دارید که کاربر توسط دوربین تلفن یا تبلت خود عکس بگیرد و به ویرایش آن بپردازد. برای اینکه اپ شما به دوربین دیوایس کاربر دسترسی داشته باشد باید مجوز آن را درون مانیفست اضافه کنید.
کامپوننت ها هم شامل Activity ها، Service ها، Broadcast Receiver ها (دریافت کننده اطلاعات) و Content Provider ها (تامین کننده محتوا) هستند.
با اکتیویتی قبلا آشنا شدیم. Service ها مربوط به پردازش های اپلیکیشن هستند.
Broadcast Receiver پل ارتباطی بین اپلیکیشن و سیستم عامل و سایر اپلیکیشن هاست.
Content Provider هم مربوط به مدیریت داده ها می باشد.
هدف از معرفی کامپوننت ها آشنایی مختصر با این موارد بود. در ادامه آموزشها مفصل به معرفی آنها می پردازیم.
توضیحات بالا اهمیت فایل مانیفست را می رساند و روشن است که سیستم عامل اندروید اطلاعات مورد نیاز خود درباره اپلیکیشن را از این فایل می گیرد.
رویداد یا Event چیست
همانطور که در پاراگراف قبل عنوان شد، اکتیویتی ها یکی از کامپوننت های سیستم عامل اندروید هستند. رویدادها روشی است جهت جمع آوری اطلاعات درباره نحوه تعامل کاربر با کامپوننت های اپلیکیشن. اندروید رویدادها را به صورت صف FIFO (First in First out به این معنی که هر رویدادی که زودتر اتفاق بیفتد زودتر پردازش می شود) نگهداری و پردازش می کند.
در مدیریت رویدادها با سه مفهوم اساسی سروکار داریم :
Event Listeners ، Event Listener Registeration و در نهایت Event Handlers.
واژه Listener به معنی شنونده بوده بنابراین Event Listeners را می توان شنونده رویدادها ترجمه کرد.به طور خلاصه کاربر وقتی روی یک view (به عنوان مثال یک دکمه) کلیک می کند، این رویداد توسط سیستم عامل شنود می شود.توسط Event Listener Registeration رویداد ثبت و توسط Event Handlers کنترل می شود. در صفحه
https://developer.android.com/guide/topics/ui/ui-events.html
انواع رویدادهای اندروید لیست شده که به معرفی آنها می پردازیم :
کنترل کننده رویداد | شنونده رویداد |
---|---|
onClick() | View.OnClickListener()
متد زمانی اجرا می شود که کاربر یکی از ویجت های موجود در صفحه نمایش مانند دکمه، تصویر، متن و … را لمس کند |
onLongClick() | View.OnLongClickListener()
متد مشابه متد قبل بوده با این تفاوت که عمل لمس کردن ویجت مدنظر باید یک ثانیه و یا بیشتر طول بکشد. |
onFocusChange() | View.OnFocusChangeListener()
متد زمانی اجرا می شود که عمل فوکوس (تمرکز) از روی ویجت موردنظر برداشته شود. یعنی ویجتی که توسط کاربر لمس شده، رها شود. |
onKey() | View.OnKeyListener()
متد زمانی اجرا می شود که روی ویجت عمل فوکوس انجام شده و یا یک کلید سخت افزاری فشرده شود. |
onTouch() | View.OnTouchListener()
متد زمانی اجرا می شود که کاربر هر عملی را بر روی صفحه نمایش انجام دهد مانند لمس دکمه یا رها کردن آن، لمس قسمتی از صفحه و … |
onCreateContextMenu() | View.OnCreateContextMenuListener()
این متد زمانی اجرا می شود که یک منو ساخته شده. |
خب! حالا وقت آن رسیده که مفاهیم را در قالب پروژه ای با عنوان شمارنده بررسی کنیم.
ابتدا یک پروژه جدید با نام دلخواه می سازیم. ما نام Counter را برای پروژه خودمان انتخاب کردیم :
پس از انتشار نسخه ۲٫۲ اندروید استودیو، حداقل API یی که در لیست Minimum SDK قرار داده شده API 9 می باشد و به این معنی است که تقریبا صددرصد دیوایس های اندرویدی از API 9 به بالا هستند و نیازی به ساخت اپلیکیشن برای نسخه های پایین تر نیست. ما هم به تصمیم گوگل احترام گذاشته، API 9 را انتخاب می کنیم. همچنین از چند نسخه اخیر، گزینه Empty Activity جایگزین Blank Activity شده که همین را انتخاب می کنیم.
گزینه Backwards Compatibility (AppCompat) مربوط به استفاده از کتابخانه AppCompat داخل پروژه می باشد که در فصل قبل آشنا شدیم. در نسخه ۲٫۲ امکانات جدیدی به اندروید استودیو اضافه شده که یکی از آنها Layout Inspector حرفه ای می باشد که در تصویر زیر مشاهده می کنید :
البته با استفاده از گزینه های بالا – سمت چپ می توان قسمت BluePrint را فعال یا غیرفعال کرد. متن Hello World پیش فرض را حذف و با کلیک روی صفحه پیش نمایش، قسمت Properties مربوط به اکتیویتی ظاهر شده که یک بک گراند به دلخواه انتخاب یا کد رنگ Hexadecimal آن را وارد می کنیم.
همچنین اکتیویتی را از RelativeLayout به LinearLayout تغییر دادیم تا اجزایی که به اکتیویتی اضافه می کنیم زیر یکدیگر قرار بگیرند (اضافه کردن خاصیت orientation یادتان نرود). در ابتدا پروژه ما شامل دو TextView و دو Button می باشد که از دکمه ها برای اضافه و کم کردن عدد و TextView برای نمایش عبارت “شماره” و خروجی int استفاده می شود.
در اینجا نیازی به نوشتن دستی کد xml ویجت ها ندیدیم و به راحتی از پالت سمت چپ، ویجت ها را کشیده و روی صفحه پیش نمایش قرار دادیم. TextView1 را به “شماره” تغییر می دهیم.TextView دوم بناست برای نمایش عدد خروجی (int) استفاده شود که در ابتدا باید عدد صفر را نمایش دهیم.
کد activity_main.xml به این صورت شد :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="ir.android_studio.counter.MainActivity" android:background="@color/colorPrimary"> <TextView android:text="@string/top_txt" android:textSize="30sp" android:textAlignment="center" android:textColor="@color/t_top" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:text="@string/result" android:textSize="70sp" android:textAlignment="center" android:textColor="@color/t_result" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/resultText" /> <Button android:text="@string/plus" android:textSize="25sp" android:background="@color/button_bg" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button_plus" /> <Button android:text="@string/minus" android:textSize="25sp" android:background="@color/button_bg" android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button_minus" /> </LinearLayout>
کد فایل رنگها (colors.xml) :
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#dedede</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="t_top">#665454</color> <color name="t_result">#de0707</color> <color name="button_bg">#7bc11a</color> </resources>
توضیح : این فایل مشابه strings.xml بوده به اینصورت که با تعریف رنگها داخل این فایل، در کل پروژه می توانیم به رنگها دسترسی داشته که به بهینه شدن اپ ما کمک می کند.
کد فایل dimens.xml :
<resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> </resources>
اندروید استودیو به صورت پیش فرض از این فایل برای تعریف فاصله اکتیویتی از ۴ جهت صفحه نمایش استفاده کرده. مزیت استفاده از این فایل به جای تعریف مستقیم واحدها درون کد اصلی، مشابه String ها و رنگ ها می باشد. استفاده مستقیم رشته ها، رنگ ها و واحدهای اندازه گیری درون کد اصلی با عنوان Hardcode شناخته می شود، به معنی کدِ سخت. که اندروید استودیو نیز از شما ایراد گرفته و پیشنهاد می کند استفاده از Hardcode را به کمترین میزان و در بهترین حالت به صفر برسانید تا هم برنامه بهینه تری داشته باشید هم اینکه هرگاه نیاز به ایجاد یک تغییر جزئی در یک یا چند قسمت از پروژه را داشتید، به سرعت بتوانید تغییر دلخواه را انجام دهید. به عنوان مثال در این پروژه ما یک بار رنگ پس زمینه دکمه ها را درون colors.xml تعریف و ۳ بار استفاده کرده ایم. هرگاه بخواهیم پس زمینه دکمه ها را تغییر بدهیم کافیست برای یک بار کد رنگ را جایگزین کد فعلی کنیم. اما در حالت معمول که کد رنگ را درون هر دکمه جداگانه تعریف کرده ایم نیاز به ۳ مرتبه جایگزینی خواهد بود.
توجه : به دلیل اینکه توضیحات کامل در خصوص dimens.xml شامل این فصل آموزشی نمی شود، فعلا واحدها را به صورت هاردکُد استفاده می کنیم.
کد فایل رشته ها (strings.xml) :
<resources> <string name="app_name">شمارشگر</string> <string name="top_txt">شماره</string> <string name="result">0</string> <string name="plus">اضافه کن</string> <string name="minus">کم کن</string> </resources>
خروجی :
حالا به سراغ فایل جاوای اکتیویتی یعنی MainActivity.java می رویم. محتوای اولیه این فایل به اینصورت می باشد :
package ir.android_studio.counter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
با توجه به اینکه خروجی کد ما اعداد صحیح هستند، از متغیر int استفاده می کنیم. متغیری از جنس int میسازیم تا مقادیر اعداد صحیح را درون خود ذخیره نماید. داخل کلاس اصلی اکتیویتی متغیر را تعریف می کنیم با یک نام دلخواه :
package ir.android_studio.counter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { int counter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
حالا مقدار پیش فرض یعنی صفر را برای این متغیر درون متد onCreate تعریف می کنیم. ویجتی که با آی دی resultText ساخته بودیم از نوع TextView بود که قرار است وظیفه نمایش عدد را بر عهده بگیرد. پس با استفاده از id بین کد جاوا و بخش ویجت های صفحه ارتباط برقرار می کنیم و تعیین می کنیم عدد خروجی جایگزین عدد پیش فرض یعنی صفر شود :
package ir.android_studio.counter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity { int counter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); counter = 0; TextView Number = (TextView)findViewById(R.id.resultText); } }
مشاهده می کنید counter را برابر عدد صفر قرار دادیم.
خط بعد را بررسی می کنیم : با توجه به اینکه برای نمایش عدد از ویجت TextView استفاده کرده ایم، همین کلاس را نوشته و یک نام دلخواه انتخاب می کنیم که ما Number در نظر گرفتیم. یک مساوی از نوع انتساب قرار داده و سپس برای اینکه به سیستم عامل اعلام کنیم از چه نوع View ای استفاده کرده ایم، نوع آن را مجدد داخل پرانتز می نویسیم (این عمل Casting نام دارد که در آموزشهای جاوا توضیح داده شده). در نهایت و بدون ایجاد فضای خالی، متد findViewById(R.id.resultText) را اضافه می کنیم که مشخص است کار آن ایجاد دسترسی به View ای با آی دی resultText می باشد. R.id دسترسی به Resource ها از طریق id را فراهم می کند. از این به بعد هر خروجی از نوع String که داخل شئ Number بریزیم در این TextView نمایش داده خواهد شد. نوبت به تعریف عملکرد Button ها می رسد. به صورت زیر، از دو دکمه که برای کم و زیاد کردن عدد نمایشگر ساخته ایم دو شئ می سازیم و توسط id آنها به شئ مربوطه هرکدام متصل می کنیم :
package ir.android_studio.counter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { int counter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); counter = 0; TextView Number = (TextView)findViewById(R.id.resultText); Button btn_1 = (Button)findViewById(R.id.button_plus); Button btn_2 = (Button)findViewById(R.id.button_minus); } }
همانطور که در آموزش “اکتیویتی” توضیح دادیم، هر یک از این کلاس هایی که استفاده می کنیم قبلا درون سیستم عامل اندروید تعریف شده اند و برای دسترسی به آنها ملزم به import کردن کلاسها به ابتدای کد هستیم. هنگامی که کلاس TextView را می نویسید، اگر لیست باز شد و TextView را از لیست انتخاب کردید، عمل import نیز به صورت خودکار انجام می شود. اما اگر از لیست انتخاب نکردید و کلاس را خودتان تا انتها نوشتید یا به هر علتی کلاس در بالای کد جاوا خودکار import نشد، کافیست روی نام کلاس کلیک کنید تا پیغام مشابه زیر نمایش داده شود که به ما اعلام می کند عمل import را می توانیم با دو کلید alt + enter انجام دهیم :
جهت مطالعه ادامه آموزش، فایل PDF را دانلود نمائید
توجه : سورس پروژه داخل پوشه Exercises قرار داده شده است.
با توجه به اینکه آموزشهای پایه با قیمت پایین در اختیار کاربر قرار گرفته و درآمد حاصل صرف تامین هزینه های وب سایت و تهیه آموزش های آتی می شود، به اشتراک گذاری این فایل با دیگران خلاف اخلاق خواهد بود.
تعداد صفحات : ۴۰
حجم : ۳ مگابایت
قیمت : ۲۲ هزار تومان
توجه: صرفا در صورتی از درگاه پشتیبان استفاده کنید که قادر به پرداخت از طریق سبد دانلود نباشید.
افزودن به سبد دانلود درگاه پشتیبان
با سلام
وقتی برای یک ویو setOnItemClickListener رویداد تعریف می شود. میشه با کد نویسی این رویداد را فراخوانی کرد؟
کافیه دستوراتی که داخل رویداد قرار دادید رو فراخوانی کنید.
درود
چه تفاوتی بین این دو روش در نوشتن کد هست؟
الف- تعریف مقدار در onclick در فایل xml و ساخت متد خارج از متد oncreat و نوشتن کد داخلش.
ب- داخل oncreat و با کمک setonclicklistener متد ایجاد کنیم و داخل اون کد بنویسیم.
راستش من حس بهتری نسبت به حالت اول دارم،گمون چون قبلاً با ویژوال بیسیک کار میکردم.
لطفا اگر ممکنه تفاوت هردو و اینکه کدوم کارآمد تره بفرمایید، با سپاس
هردو روش استفاده میشه و بطور کل تفاوت خاصی نداره. قبلا یه جا خونده بودمش ولی چیزی یادم نموند. سرچ کنید
setonclicklistener vs sml onclick
ببینید چه مطالبی موجوده در موردش
سلام استاد گرامی
من این مبحث event ها رو تموم کردم همه ی کد ها نوشتم طبق آموزش ولی مشکل اینجاس ک وقتی میخوام خروجی بگیرم ارور میده تو عکس زیر هس
http://s7.picofile.com/file/8385606418/Screenshot_51_.png
حتی تو سایتای خارجی هم زدم یه سری کدا اضافه کردم ک تو عکس هستش
تا اونجایی ک فهمیدم میگه tag استارت و پایان
لطفا راهنمایی کنید ممنون
گفته مشکل در خط ۸ هست. تو اسکرین شات خط ۸ مشخص نیست. بررسی کنید ببینید کجاش مورد داره
درباره Broadcast Receiver ها در کدوم مبحث توضیح داده شده؟ من این آموزش رو خریدم چون فکر کردم توش در این باره توضیح داده شده اما چیزی نبود.
Broadcast Receiver رو هنوز صحبتی نکردم. برای آموزشهای غیر رایگان ابتدای صفحه مواردی که توضیح داده شده رو لیست کردم تا قبل از خرید بدونید آیا نیازتون رو کامل برآورده میکنه یا نه
سلام
بنده می خواهم اپ ام در اندروید های بالای ۸ / مثلا ۹ / مشکلی نداشته باشه /
تنظیمات و کانفیگ های مانی فست برای این موضوع چیه ؟
ممنون
کانفیگ خاصی نیست برای ساپورت دیوایسها. کتابخانه ها و کدهایی که داخل پروژه استفاده میکنید باید سازگار باشه. یه مورد مشخص نیست
سلام سید جان خسته نباشین. من کل پکیج آموزشی را گرفتم ولی آموزش مربوط این درس با عنوان Event Handling را توی فایلهای پی دی اف نتونستم پیدا کنم (البته Event تنها هست که متفاوت از این درسه)
در این مورد و موارد مشابه دوتا سوال دارم لطفا راهنمایی کنین
(۱) وقتی که من کل پکیج آموزشی را خریدم آیا امکان این هست که بعضی از دروس را هم به صورت تکی بدون پرداخت مجدد دانلود کنم؟؟؟
(۲) اسم فایل این آموزش (Event Handling) توی پکیجی که دانلود کردم چیه؟؟؟
سلام. خیر همین مبحث هست.
۱- خیر امکان دانلود تکی نیست.
۲- همون Event هست
سلام استاد
طبق درس در ابتدا در کجا دارین پروژه جدید رو میسازین و اونطور که در درس های ابتدایی بود نیست
و بعد وقتی که من API 9 رو میزنم بعد از ران شدن این ارور رو میده
ERROR: Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 14 declared in library
خیلی هم سرچ کردم و سعی کردم درستش کنم ولی نشد.
اندروید استودیو در هر آپدیتی یه سری تغییراتی داره. این آموزش مربوط به گذشته هست و مراحل ساخت پروژه مقداری متفاوته. اگه در این مراحل مشکلی دارید فصل ۳ رو مطالعه بفرمایید. در خصوص ارور هم متن ارور رو مطالعه بفرمایید. گفته MinSDK نمیتونه از ۱۴ کمتر باشه. در حال حاضر دیگه دلیلی نداره بخواید از API 9 استفاده کنید.
سلام من تمام مراحلو رفتم و برنامه بدون مشکل اجرا میشه ولی دکمه هیچ کاری نمیکنن یعنی اصلا عمل نمیکنن
۱- با جلمه “دکمه ها هیچ کاری نمیکنن” هیچکس نمیتونه شما رو راهنمایی کنه
۲- کدها رو دقیق بررسی کنید. یه جا رو اشتباه رفتید
سلام ؛
چجوری باید بفهمیم یک text view خالیه ؟
ی سوال دیگه (ببخشید که مرتبط با موضوع نیست) :
چجوری باید توی فایل های xml یک کلمه رو سرچ کنیم چه تو اندروید استودیو چ خارج از اون
سرچ داخل xml یا txt یا … مگه تفاوت میکنه؟
داخل یکی از مباحث مطرح شده بود. دقیقا تو ذهنم نیست کدوم مبحث
سوال اولم مطرح شده یا سوال دومم؟
سوال “چجوری باید بفهمیم یک text view خالیه ؟”
سلام
وقتی فلش بازگشت به صفحه اصلی رو میزنیم و دوباره مربع رو میزنیم و برنامه رو اجرا میکنیم ، شمارنده صفر میشه . میشه لطفا راهنمایی بفرمایید.
سلام. یه راهش استفاده از sharedPreferences هست (جدیدترین مبحثی که روی سایت قرار گرفته)
سلام جناب مهندس ضمن تشکر از شیوه پرداختن به مطالب و روش ارائه
میخواستم بدونم برای استفادهاز دوربین وتقویم ما چطور باید عمل کنیم چون توی اون پکیجتون به این مبحث اشاره ای نشده بود
باسپاس
سلام. مباحث به مرور در حال تکمیل هست (مبحث بعدی دیتابیس هست که ان شا الله تا یک هفته آینده تکمیل خواهد شد)
سلام اگر بخواهیم کل کتاب را یکجا خریداری کنیم چطور میتونیم؟
سلام. دریافت پکیج:
https://android-studio.ir/android-programming-course-package/
سلام ببخشید زبان برنامه نویسی اندروید استودیو جاوا هست یا زبان خاصی داره اگه میشه لینک اموزش زبانشو کامل بزارین ممنون
– فصل بندی سمت راست سایت رو چک بفرمایید اولین فصل مربوط به زبان هست
– سوال رو در بخش نامربوط مطرح کردید و بعد از ۲۴ ساعت حذف میشه
سلام آموزش بسیار هالی بود چون پروژه محور مباحث رو توضیح دادید
یه سوال
اگر بخوایم عملیات وقتی برنامه onstop و on resume میشه هم ادامه داشته باشه؟ و عدد ۰ نشه؟؟
مطالعه بفرمایید
http://stackoverflow.com/questions/151777/saving-android-activity-state
سلام
خسته نباشید
بنده این پروژه شمارشگر رو ساختم ولی در اندروید پنج این برنامه باز نمیشه البته روی اندروید چهار به خوبی اجرا میشه و همچنین وقتی روی اندروید چهار با خود اندروید استودیو اجرا میکنم برنامه به خوبی کار میکنه ولی پیغامی در همین رابطه میده
api 21 below
یه همچین چیزی
اسکرین شات بدید
http://uupload.ir/files/4qu5_۲۰۱۶۱۲۱۱_۲۲۱۴۴۶.jpg
البته تو فایل مانی فست قست application>
به رنگ زرد در اومده و اونجا هم اخطاری داده که احتمال زیاد مربوط به همین مطلب است در صورت نیاز بفرمایید تا براتون بفرستم.
سلام.
من این آموزش رو دانلود کردم.اما فایل counter رو باز نمی کنه….
سلام. فایل مشکلی نداره. zip هستش و باید اول از حالت فشرده خارج کنید
سلام مهندس خسته نباشید دو تا سوال دارم ازتون
۱٫میخواستم بدونم چطور ی اکتیویتی رو از طریق دکمه در یک اکتیویتی دیگه فراخوانی کنم یعنی با انتخاب دکمه بره به اکتیویتی آدرس دهی شده
۲٫یه متن بزرگو(مثلا۱۵صفحه)با چه ابزاری به اکتیویتی اضافه کنم
ممنون
آموزش بعدی مربوط به همین مساله هست که ایشالا به زودی آماده میشه (در خصوص intent سرچ کنید)
سلام
تمام Rهای من قرمز شدن و عبارت cannot resolve symbol R رامینویسه قبلا هم این اتفاق افتاده بود و alt+enter و زدم درست شد اما الان دیگه نمیشه باید چیکار کنم تا درست بشه ؟
اسکرین شات بدید لطفا
سلام وقت بخیر من تازه با نرم افزار انردوید استودیو آشنا شدمه آیا میتونم با این نرم افزار نرم افزار های هموچن هفت صبح یا خبر گردی درست کنم ؟؟؟؟؟ اندروید استودیو یا ایکلیپس ؟؟؟ کدوم ؟؟؟ راحتر بهتره
ایکلیپس مدتیه پشتیبانی نمیشه از سمت گوگل و توسعه دهنده ها به اندروید استودیو کوچ میکنن
ضمنا سوالتون مرتبت با بحث نبود
خسته نباشید.آموزش بعدی انشالله کی میاد؟
ممنون. یه مقدار درگیر هستم تا آخر این هفته. ان شا الله از شنبه بعدی رو شروع میکنم
سلام تو قسمت Palette چرا واسم تصویر پیش فرض برنامه رو نشون نمیده؟ تصویر زیر رو ببینید
http://vip.opload.ir/vipdl/95/8/aqilhex/Android-studio.png
برای نمایش پیش نمایش گزینه ی مربوط به انتخاب API که الان < null > هستش رو باید به یه API دلخواه تغییر بدید.
میشه بیشتر توضیح بدین؟چجوری تغییر بدم؟
ببینید تصویری که خودتون فرستادین کجاش null زده. تغییرش یه انتخاب کردنه فقط
دستتون درد نکنه آقای مهندس
فقط ایمیل شما چی هست؟
و آموزش بعدی کی میاد؟
خواهش
سوالتون مربوط به مباحث مطرح شده هست همین قسمت دیدگاههای مربوط به اون مطلب بپرسید. غیر این باشه صفحه “تماس با ما” استفاده کنید
صلوات بفرست!!!!!