باقی ماندن اطلاعات در اکتیویتی
سلام وقت بخیر.من یه پروژه نوشتم که هم با دریافت پیام و هم به صورت دستی یه سری اطلاعات رو ست میکنه و پنج تا اکتیویتی دارم که هر کدوم مربوط به یه چیزی هست و برای هرکدوم میشه اطلاعاتیو ست کرد.وقتی که از اکتیویتی دوم مثلا بک رو بزنم و برم به اکتیویتی اول و دوباره برم به دومی اطلاعات ست شده باقی نمونده و حالت پیش فرض رو نمایش میده.باید چیکار کنم؟کل متد هارو برای هر اکتیویتی داخل Oncreate نوشتم
به عکس زیر توجه کنید :

وقتی شما یک اکتیویتی را برای بار اول اجرا میکنید روال زیر اجرا میشه :
onCreate
onStart
onResume
زمانی که میرید به اکتیویتی دوم روال زیر اتفاق می افته :
اکتیویتی اول : onPause
اکتیویتی دوم : onCreate
اکتیویتی دوم : onStart
اکتیویتی دوم : onResume
حالا میخوایم دکمه back رو بزنیم و بریم اکتیویتی اول :
اکتیویتی دوم : onPause
اکتیویتی اول : onResume
همونطور که میبینید دیگه متد onCreate اجرا نمیشه.
البته این روال در مواقعی به نحوی دیگه هم عمل میکنه که میتونید با یه جست و جو در اینترنت لینک و همچنین یک تست عملی اطلاعاتی در این زمینه کسب کنید.
حالا شما باید تصمیم بگیرید که چه جوری اطلاعات رو بین اکتیویتی ها انتقال بدید :
از طریق bundle
از طریق یک آرایه مشترک بین تمامی اکتیویتی ها
.....
الان توی این اکتیویتی کدوم قسمتو داخل این متدایی که گفتین بذارم تا اطلاعات بعد از بک زدن باقی بمونن؟
package aa.mmm.com;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Spinner;
@SuppressWarnings("deprecation")
public class secondActivity extends Activity {
String time;
static boolean checkOnOff = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.f2);
Button btnsave1 = (Button) findViewById(R.id.btnsave1);
Button btnback1 = (Button) findViewById(R.id.btnback1);
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
final SmsManager smsmanager = SmsManager.getDefault();
final Spinner Spinner = (Spinner) findViewById(R.id.spinner1);
String[] items = new String[]{ "Timer", "500", "1000", "1500", "2000" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, items);
Spinner.setAdapter(adapter);
Spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// Log.v("item", (String) parent.getItemAtPosition(position));
time = (String) parent.getItemAtPosition(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
String second = SMS.K;
if (second != null) {
String message = second;
if (message.equalsIgnoreCase("1,off")) {
checkOnOff = false;
}
else if (message.equalsIgnoreCase("1,on"))
{
checkOnOff = true;
}
SMS.K = "";
}
if ( !checkOnOff) {
checkBox.setChecked(false);
checkBox.setText("OFF");
} else {
checkBox.setChecked(true);
checkBox.setText("ON");
}
btnback1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(secondActivity.this, P1Activity.class);
secondActivity.this.startActivity(intent);
secondActivity.this.finish();
}
});
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (checkBox.isChecked()) {
checkBox.setText("ON");
}
else {
checkBox.setText("OFF");
}
}
});
btnsave1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
StringBuffer result = new StringBuffer();
String check;
result.append(checkBox.isChecked());
if (checkBox.isChecked()) {
check = "ON";
}
else {
check = "OFF";
}
smsmanager.sendTextMessage("+9891....", null, check + "," + time, null, null);
}
});
}
}
سلام.
شما باید اطلاعات رو به صورت پایدار ذخیره کنید.یعنی باید یا از فایل و یا از دیتابیس و یا اینکه از SharedPreferences استفاده کنید.بهترین حالت برای مشکل شما همین SharedPreferences هست.
بعد از انتخاب یکی از این سه روش ذخیری سازی،باید وقتی دکمه back زده میشه،اطلاعات رو ذخیره کنید البته بهتره تو متد onPause این کارو انجام بدین (حتما همین کارو بکنید) و وقتی دوباره به اکتیویتی مورد نظر برمی گردین باید توی متد onResume اطلاعات ذخیره شده رو بازیابی کنید و مقادیر خونده شده رو دوباره مثلا رو چک باکس یا اسپینرتون ست کنید.
اگه عضو ویژه هستین،می تونید آموزش SharedPreferences رو که تو بخش هفدهم پکیج قدیمی هست ببیند،اگه نه، که یه سرچی توی انجمن بزنید،می تونید روش استفاده از اونو یاد بگیرین.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .