بستن (destroy کردن) و اجرای دوباره یک Activity (در اصطلاح، restart یا refresh کردن Activity)، با اشاره کاربر بر روی یک دکمه (Button)، در برنامه نویسی اندروید
در این مبحث قصد داریم آموزش بدهیم که چگونه می توانیم در یک Activity ، دکمه ای (Button) را قرار بدهیم که با اشاره بر روی آن دکمه، Activity بسته شده (destroy شود) و دوباره از ابتدا اجرا شود.
ابتدا در لایه گرافیکی Activity ، یک دکمه (Button) قرار می دهیم :
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
سپس کدهای Activity را به صورت زیر می نویسیم (نام Activity را برابر Activity_3 در نظر گرفته ایم) :
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Activity_3 extends Activity {
private int restart_or_not = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_3);
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
restart_or_not = 1;
finish();
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
if(restart_or_not==1){
Intent intent = new Intent(this, Activity_3.class);
startActivity(intent);
}
super.onDestroy();
}
}
ابتدا یک متغیر را تعریف کرده ایم که توسط آن تشخیص می دهیم که کاربر قصد restart کردن Activity را دارد یا خیر (مقدار پیش فرض آن برابر 0 است) :
با اشاره کاربر بر روی دکمه (Button) کدهای زیر اجرا می شوند :
finish();
ابتدا مقدار متغیر restart_or_not را به 1 تغییر می دهیم و پس روش finish اجرا می شود که برای بستن (destroy کردن) Activity به کار می رود، اما ما قصد داریم که بعد از بسته شدن، دوباره Activity اجرا شود، بنابراین روش onDestroy را به صورت زیر نوشته ایم :
protected void onDestroy() {
// TODO Auto-generated method stub
if(restart_or_not==1){
Intent intent = new Intent(this, Activity_3.class);
startActivity(intent);
}
super.onDestroy();
}
در این روش، ابتدا مقدار restart_or_not را چک می کند و اگر برابر 1 بود، کد زیر اجرا خواهد شد :
startActivity(intent);
اجرای کد بالا باعث می شود که دوباره Activity از نو اجرا شود (نام Activity را برابر Activity_3 در نظر گرفته ایم).
شاید این پرسش به وجود بیاید که چرا اصلا متغیر restart_or_not تعریف شد و قبل از اجرای دوباره Activity ، ابتدا چک می کنیم که مقدار آن برابر 1 باشد. متغیر restart_or_not را به این دلیل به کار برده ایم که ممکن است کاربر، دکمه Back گوشی را فشار دهد که از Activity خارج شود (destroy شود)، چون برای روش onDestroy کد نوشته ایم، بنابراین آن کدها اجرا خواهند شد، بنابراین باید حتما مقدار متغیر restart_or_not برابر 1 باشد تا دوباره وارد Activity شویم و تنها در صورتی برابر 1 خواهد بود که کاربر بر روی دکمه مربوط به restart شدن Activity اشاره کرده باشد (نه در حالت معمولی که کاربر، دکمه Back گوشی را فشار می دهد).
اگر نخواهیم نام Activity را در کدها ذکر کنیم، می توانیم با کد زیر، intent مربوط به آن را به دست بیاوریم (این کد در هر Activity که اجرا شود، intent مربوط به Activity را به ما می دهد) :