在片段内使用共享首选项

时间:2017-08-20 09:09:00

标签: android android-fragments sharedpreferences

我想在片段中使用共享首选项。一个用于检查该片段是否第一次运行,如果是,则将另一个值存储到共享首选项中。我不知道为什么它不起作用。这是我的代码。

String user_name;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.item_list_fragment, container, false);

    SharedPreferences sp = getActivity().getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = sp.edit();
    if(sp.getBoolean("isFirst",true)) {
        edit.putBoolean("isFirst", false);
        edit.putString("First_Name", FirstRunActivity.username).apply();
    }

    user_name = sp.getString("First_Name","NOT WORKKING");

    TextView test = (TextView) view.findViewById(R.id.test);

    test.setText(user_name);


    }

2 个答案:

答案 0 :(得分:0)

if(sp.getBoolean("isFirst",true)) { 
   edit.putBoolean("isFirst", false); 
   edit.putString("First_Name", FirstRunActivity.username).commit(); 
}

答案 1 :(得分:0)

从您的代码中,如果您最初没有将isFirst的值设置为true,那么它将始终返回false

if(sp.getBoolean("isFirst",true)) {
    edit.putBoolean("isFirst", false);
    edit.putString("First_Name", FirstRunActivity.username).apply();
}

您可以尝试此解决方案。

首先在您的FirstRunActivity中,您可以设置类成员布尔变量

private boolean inFirstActivity = true;

然后在你的onCreate方法中,你需要设置你的SharePreference isFirst键值,如

if(inFirstActivity) edit.putBoolean('isFirst', true);

然后,你可以在课堂上查看其后的代码。

if(sp.getBoolean("isFirst",true)) {
  edit.putBoolean("isFirst", false);
  edit.putString("First_Name", FirstRunActivity.username).apply();
}