[英]Sharedpreferences doesn't work in onCreateOptionsMenu
我嘗試顯示指向菜單項的展示視圖,但是此共享首選項僅在我的應用關閉之前保存,在我關閉應用並再次打開之后保存,展示視圖將再次出現。 我如何只能第一次顯示展示櫃視圖?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_contact, menu);
pref = getSharedPreferences(String.valueOf(getApplicationContext()), Context.MODE_PRIVATE);
editor = pref.edit();
if (pref.getBoolean("isFirstTime", true)) { // default true for first time
editor.putBoolean("isFirstTime", false).commit(); // update so it will false ever after
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
mFancyShowCaseView = new FancyShowCaseView.Builder(ContactTabActivity.this)
.focusOn(findViewById(R.id.item_sync)) // ActionBar menu item id
.focusCircleRadiusFactor(1.5)
.focusBorderSize(15)
.focusBorderColor(Color.parseColor("#FFA64D"))
.customView(R.layout.case_view_sync, new OnViewInflateListener() {
@Override
public void onViewInflated(@NonNull View view) {
view.findViewById(R.id.btnOke).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mFancyShowCaseView.removeView();
}
});
}
}).closeOnTouch(false)
.build();
mFancyShowCaseView.show();
}
}, 50
);
}
editor.commit();
return super.onCreateOptionsMenu(menu);
}
代替
pref = getSharedPreferences(String.valueOf(getApplicationContext()), Context.MODE_PRIVATE);
采用
pref = getSharedPreferences("First_tym_check",Context.MODE_PRIVATE);
這是因為 :-
String.valueOf(getApplicationContext())
此字符串值不是 恆定的
如果重新啟動應用程序,您將注意到該值將發生顯着變化,例如:-
(yourPackageName).@521c1
, 下次 , (yourPackageName).@631d1
, 因此,字符串值每次都不同。
使用以下代碼。 使用apply()代替commit()和getApplicationContext()。getPackageName()代替getApplicationContext()
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_contact, menu);
pref = getSharedPreferences(String.valueOf(getApplicationContext().getPackageName()),
Context.MODE_PRIVATE);
if (pref.getBoolean("isFirstTime", true)) { // default true for first time
editor = pref.edit();
editor.putBoolean("isFirstTime", false).apply(); // update so it will false ever after
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
mFancyShowCaseView = new FancyShowCaseView.Builder(ContactTabActivity.this)
.focusOn(findViewById(R.id.item_sync)) // ActionBar menu item id
.focusCircleRadiusFactor(1.5)
.focusBorderSize(15)
.focusBorderColor(Color.parseColor("#FFA64D"))
.customView(R.layout.case_view_sync, new OnViewInflateListener() {
@Override
public void onViewInflated(@NonNull View view) {
view.findViewById(R.id.btnOke).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mFancyShowCaseView.removeView();
}
});
}
}).closeOnTouch(false)
.build();
mFancyShowCaseView.show();
}
}, 50
);
}
return super.onCreateOptionsMenu(menu);
}
您的案例值立即提交了sharedpreferences,請參考此鏈接: 在活動之間使用共享首選項的最佳方法是什么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.