package ir.ben.hassan; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.DragStartHelper; import android.os.Bundle; import android.widget.Toast; public class two extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); Toast.makeText(this, "two OnCreate ", Toast.LENGTH_LONG).show(); } @Override protected void onPause() { super.onPause(); Toast.makeText(this, "twoOnPause ", Toast.LENGTH_LONG).show(); } @Override protected void onStop() { super.onStop(); Toast.makeText(this, "twoOnStop ", Toast.LENGTH_LONG).show(); } @Override protected void onStart() { super.onStart(); Toast.makeText(this, "twoOnStatrte ", Toast.LENGTH_LONG).show(); } @Override protected void onResume() { super.onResume(); Toast.makeText(this, "twoOnResume ", Toast.LENGTH_LONG).show(); } @Override protected void onDestroy() { super.onDestroy(); Toast.makeText(this, "twoOnDestroy ", Toast.LENGTH_LONG).show(); } @Override protected void onRestart() { super.onRestart(); Toast.makeText(this, "twoOnRestart ", Toast.LENGTH_LONG).show(); } }
نتیجه اخلاقی اول کریت میشه بعد استارت میشه بعد ریزوم
وقتی هم تو گوشی بک می زنم میره تو همون mainactivity دیگه two اول پاز بعد استپ بعدم دیستروی میشه!
یادت باشه اگه مثلا داری زمانو به کاربر نشون میدی و میخوای درست باشه باید غیر از onCreate بری تو onResume هم بنویسی تاریخو بزن(تازه اینم فقط همون سری اول که ریزوم شد کار می کنه اگه بخوای هر دقیقه آپدیت کنه باید بهش دستور بدی)
اینم شکل ترتیب کارایی که انجام میشه:
با ساختن یه activity جدید سه تا چیز اضافه میشه
یه فایل جاوا
یه layout xml
یه توضیح تو manifest
تو منیسفت جلو اسم همه activityها یه نقطه گذاشته معنیش اینه که تو پکیج فعلی بعد تو این اکتیویتی
اگه تو یه پکیج دیگه باشه باید قبل نقطه آدرسای پکیجه رو بنویسی
package="ir.ben.hassan">
<activity android:name=".two"></activity>
<activity android:name="ir.ben.hassan.two"></activity>
حالا وقتی می خوای یه activity دیگه یا یه اپ دیگه فعال شه میری تو دکمه ت می نویسی:
button.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent=new Intent(MainActivity.this,two.class);
startActivity(intent);
// button.setText("Yahoooo");
return true;
}
});
اولی مبدا، دومی مقصد.
موارد استفاده intent:
رفتن به یه activity دیگه، تماس صوتی، بازکردن یه صفحه وبسایت، بازکردن تنظیمات و.
تا حالا داشتیم با متد OnCreate کار می کردیم:
@Override protected void onCreate(Bundle savedInstanceState) {
یه activity متدهای دیگه ای هم داره. بعد از تموم شدن OnCreate اگه بریم بنویسیم On خودش کلیاشو میاره
OnResume
OnStart
OnStop
OnDestroy
OnRestart
اینا رو تو activity دوم که می نوشتم خودش نمیاورد دستی کپی کردم و برا این که ارور نده باید @Overrideشو پاک کنی
بعدا فهمیدم: دلیل این که خودش نمیاورد on با اوی کوچیکه :|
#باگگگگگ :
{یه چیز عجیبم که برا من اتفاق افتاد گفتم توی pause نوشته ی توی mainActivity رو تغییر بده وقتی بر می گشتم می دیدم این نوشته تغییر کرده ولی هنوز دکمه هه مثل قبل داره رنگو عوض می کنه. دکمه هه که تو OnCreate بوده. ولی خب تو OnCreate که متنه هم تاریخ بود این همون متن OnPause مونده که :|
بالاخره داره OnCreate کار می کنه یا نه؟!}
میری تو OnCreate زیر
setContentView(R.layout.activity_main);
می زنی Toast و دو تا گزینه میاره توست خالیه رو می زنی:
Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
این this چیزی از جنس context هست
این جا همون main activity هست
راه آسون تر:
اصلا اون متد اضافه شده و اون implement تو خط اولو نمی نویسی
میری رو this جلو چشم OnClickListener وای میسی alt+enter می زنی
بهت میگه توی main activity این implemenet . کنم؟ میگی آره خودش همه اونا رو میسازه
اگه چنتا دکمه می خواستی برا هر کدوم یه OnClickListener میذاری(این غیربهینه است ولی حالا!)
اون جا به جای this می نویسی new On خودش میاره new OnClick Listener
برای این که کلی مموری نگیرن میای تو همون یه دونه متد onclicklistener می نویسی برای هر دکمه اگه اونی که کلیک شده همینه بیا کار اینو بکن
اینجا رو نتونستم چن تا دکمه بذارم باگگگگگ
حالا اگه خواستی کلیک طولانی رو بگی از OnLongClickListener استفاده می کنی
جلو باتن می نویسیش و alt+enter و .
مثال:
button.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { button.setText("Yahoooo"); return false; } });
اگه تا همین جا بسنده کنی هر سری لانگ کلیک کنی یه کلیک هم به حسابش میاره و کارای توی کلیک هم انجام میده
برا اینکه درستش کنی return false رو بکن true
درباره این سایت