簡體   English   中英

Sharedpreferences在onCreateOptionsMenu中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM