بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مقدار دهی شدن اولیه عناصر پس از چرخش

مدیریت گفتگو
سجاد 12 سال پیش
آخرین تغییر: 10 سال پیش

سلام من یک برنامه ی صلوات شمار نوشتم زمانی که من موبایل را به صورت عمودی در دست گرفتم میتوانم از آن استفاده کنم اما اگر گوشی را در همان لحظه بچرخانم برنامه از اول شروع میشود و تعداد صلوات های شمرده شده _0_ میشود.
لطفا راهنمایی کنید تا این مشکلو برطرف کنم.

سجاد صادق زاده

نظرات

javac 12 سال پیش
فکر میکنم وقتی صفحه میچرخه اکتیویتی جاری به حالت onPause میره شما باید در این متد اطلاعات رو ذخیره کنید و در Onresume دوباره استفاده کنید اگر اشتباه میگم لطفا اساتید تصحیح کنند

پاسخ‌ها 8

Spirit 12 سال پیش

سلام ، در این مورد خاص استفاده از 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);

نظرات

b.fat 12 سال پیش
دست شما درد نکنه. برم تستش کنم ببینم کار میکنه یا نه؟
سجاد 12 سال پیش

باو کمک کنید دیگه اینم سورسش.

 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);

}
});

}
}

نظرات

مجتبی یگانه 12 سال پیش

"باو" بیا اینم کمک برنامه کاملا تست شد ، ولی به نظر من اندروید باید خودش انجامش میداد !

متغییر اول ذخیره میشه بعد ، برمیگردونیمش !

هیچ فرقی با داده های ارسال شده در 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); } }); } }

کد هایی که من اضافه کردم مشخص شده  ، موفق باشید

نظرات

سجاد 12 سال پیش
این رو امتحان کردم ج نداد. :(
مجتبی یگانه 12 سال پیش
داداش سورسه خودته آآآآآ ، منم رفتم واسش xml ساختم و ایدی هارو ست کردم ، چک کن درست ، ضمتا چرخش شبیه ساز با ctrl+F11 ممکنه (فقط کنترل چپ )
سجاد 12 سال پیش

میشه کاری کرد که اصلا صفحه نچرخه؟؟
شما بلدی؟؟

نظرات

مجتبی یگانه 12 سال پیش

چرا سرچ نمیکنید ، منم با سرچ "چرخش" اینو پیدا کردم 

لینک 

اما از کد ذخیره ی اطلاعات چرخش نترس ، مثله اینتنت هست ، برو دنبالش

موفق باشید

نظرات

PandaStudio 12 سال پیش

سلام

منم این مشکل را داشتم با یه سرچ تو 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"); } }

نظرات

Criss 12 سال پیش
این روشی که شما گفتی فقط مقدار یک متغییر رو نگه میداره من توی یک اکتیویتی حد اقل 30 متغییر دارم چطور میتونم اونهارو نگه داری کنم؟
PandaStudio 12 سال پیش
من هرچی سرچ کردم روش دیگه ای پیدا نکردم میتونی متغیر هاتو توی آرایه بریزی. یه راه دیگه هم هست اینکه بی خیال چرخش بشی :)
مجتبی یگانه 12 سال پیش
متغییر هایی که برای حفظ State فعلی نیاز هست رو نگه دارید ، راه دیگه ای نیست !
Smkm79 11 سال پیش
ممنون ، خیلی کمک کرد!
amirmojiry 12 سال پیش

برای امتحان کردن این حالت چرخش، حتمن باید یه AVD جدید بسازیم؟ یا امکانی وجود داره که توی همون AVD عمودی، حالت چرخش رو هم تست کنیم؟

نظرات

b.fat 12 سال پیش
Genymotion هم که دیگه مشخصه. یک دکمه برای چرخش در کنار پنجره داره. خیلی بهتر از امولاتور اصلیه (AVD) هست.
hojat_babaie 12 سال پیش

 

برای اینکه درهنگام چرخش صفحه نمایش اطلاعات اکتیویتی از بین نرود باید در فایل مانیفست در اکتیویتی که می خواهید اطلاعات ان از بین نرود مشخصه زیر را اضافه نمایید

 

android:configChanges="keyboard|keyboardHidden|orientation"

نظرات

Reza 10 سال پیش
فرقی نمیکنه ، باز هم اطلاعات می پره ! این کد رو کسی استفاده کرده ؟ جواب میده ؟ برای من که جواب نداد چون به هر حال اکتیویتی ReCreate میشه ( با استفاده از LOG متوجه شدم ) . در ضمن اگه قرار بود با این یه خط اطلاعات نپره پس کاربرد onSaveInstanceState و onRestoreInstanceState چیه ؟

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .