مقدار دهی شدن اولیه عناصر پس از چرخش
سلام من یک برنامه ی صلوات شمار نوشتم زمانی که من موبایل را به صورت عمودی در دست گرفتم میتوانم از آن استفاده کنم اما اگر گوشی را در همان لحظه بچرخانم برنامه از اول شروع میشود و تعداد صلوات های شمرده شده _0_ میشود.
لطفا راهنمایی کنید تا این مشکلو برطرف کنم.
سجاد صادق زاده
سلام ، در این مورد خاص استفاده از SharedPreferences بهتر هست به نظرم چون بعد از خروج از برنامه هم مقادیر ذخیره میشه.، برای ذخیره بدین صورت عمل کنید :
SharedPreferences sp = getSharedPreferences("your_prefs",Activity.MODE_PRIVATE);
SharedPreferences.Editor editor =
sp
.edit(); editor.putInt("your_int_key", yourIntValue); editor.commit();
و برای استفاده از مقدار ذخیره شده بدین صورت :
SharedPreferences sp = getSharedPreferences("your_prefs",Activity.MODE_PRIVATE);
int myIntValue = sp.getInt("your_int_key",0);
باو کمک کنید دیگه اینم سورسش.
package sajad_foozool.course.app.zekr_shomar;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class ZekrshomarActivity extends Activity {
public int counter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button btnReset = (Button) findViewById(R.id.btnReset);
final Button btnPlus = (Button) findViewById(R.id.btnPlus);
final Button btnMinus = (Button) findViewById(R.id.btnMinus);
final TextView txtShomar = (TextView) findViewById(R.id.txtShomar);
Toast.makeText(ZekrshomarActivity.this, "Zekr shomar was opened", Toast.LENGTH_SHORT).show();
btnReset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
counter = 0;
txtShomar.setText("000000");
}
});
btnMinus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (counter > 0) {
counter--;
txtShomar.setText("" + counter);
}
}
});
btnPlus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
counter++;
txtShomar.setText("" + counter);
}
});
}
}
"باو" بیا اینم کمک برنامه کاملا تست شد ، ولی به نظر من اندروید باید خودش انجامش میداد !
متغییر اول ذخیره میشه بعد ، برمیگردونیمش !
هیچ فرقی با داده های ارسال شده در intent نداره پس بهتره اول بخاطر null بودن ، و بعد بخاطر موجود بودن کلید برسی بشه ، چون در زمان اولین اجرا instancestate ذخیره نشده ، و اگر برای null نبودن برسی نشه ، کرش میکنیم که خیلی بده ، مگه نه ؟
package ir.negano.rotate; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class ActivityRotate extends Activity { public int counter; // -------------------------------------------- new codes ! -------------------------- @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt("counter", counter); } //----------------------------------------------------------------------------- @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btnReset = (Button) findViewById(R.id.btnReset); final Button btnPlus = (Button) findViewById(R.id.btnPlus); final Button btnMinus = (Button) findViewById(R.id.btnMinus); final TextView txtShomar = (TextView) findViewById(R.id.txtShomar);
//--------------------------------------new codes ! --------------------------- ---------------- if (savedInstanceState != null && savedInstanceState.containsKey("counter")) { counter = savedInstanceState.getInt("counter"); txtShomar.setText("counter afer restore from rotate is :" + counter); } //----------------------------- end of new codes --------------------------------------------------------------- btnReset.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { counter = 0; txtShomar.setText("0"); } }); btnMinus.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (counter > 0) { counter--; txtShomar.setText("" + counter); } } }); btnPlus.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { counter++; txtShomar.setText("" + counter); } }); } }
کد هایی که من اضافه کردم مشخص شده ، موفق باشید
چرا سرچ نمیکنید ، منم با سرچ "چرخش" اینو پیدا کردم
اما از کد ذخیره ی اطلاعات چرخش نترس ، مثله اینتنت هست ، برو دنبالش
موفق باشید
سلام
منم این مشکل را داشتم با یه سرچ تو stack و خوندن نظرات دوستان با روش زیر مشکلمو حل کردم
باید با استفاده از متد onSaveInstanceState مقدار اولیه را ذخیره کنید و بعد با استفاده از متد onRestoreInstanceState مقدار مورد نظر را بخونید. حالا میتونید متدonCreate را بنویسید و از مقدار counter استفاده بکنید.
با این کار وقتی اسکرین را بچرخونید درسته که اکتیویتی از نو لود میشه اما مقدار قبلی counter حفظ میشه و ریست نمیشه
public int counter = 0;
@Override protected void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt("counterValue", counter); }
@Override public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState != null && savedInstanceState.containsKey("counterValue")) { counter = savedInstanceState.getInt("counterValue"); } }
برای امتحان کردن این حالت چرخش، حتمن باید یه AVD جدید بسازیم؟ یا امکانی وجود داره که توی همون AVD عمودی، حالت چرخش رو هم تست کنیم؟
برای اینکه درهنگام چرخش صفحه نمایش اطلاعات اکتیویتی از بین نرود باید در فایل مانیفست در اکتیویتی که می خواهید اطلاعات ان از بین نرود مشخصه زیر را اضافه نمایید
android:configChanges="keyboard|keyboardHidden|orientation"
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .