我正在尝试将用户在Settings.java
下面的登录屏幕中输入的名称保存到sharedPreference
,TestFragment2.java
将从SampleTabsDefault.java
读取该名称,该名称是从另一个FragmentActivity调用的, private void savePrefs(String key, boolean value) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putBoolean(key, value);
edit.commit();
}
private void savePrefs(String key, String value) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
Editor edit = sp.edit();
edit.putString(key, value);
edit.commit();
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
savePrefs("CHECKBOX", cb.isChecked());
if (cb.isChecked())
savePrefs("NAME", et.getText().toString());
Intent myIntent = new Intent("com.test.SAMPLETABSDEFAULT");
startActivity(myIntent);
finish();
}
}
Settings.java
Intent myIntent = new Intent("com.test.SAMPLETABSDEFAULT");startActivity(myIntent);
SampleTabsDefault.java
加载 class NavTabs extends FragmentPagerAdapter {
public NavTabs(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch(position)
{
case 0:
TestFragment fragment = new TestFragment();
return fragment;
case 1:
TestFragment2 fragment2 = new TestFragment2();
return fragment2;
}
TestFragment3 fragment3 = new TestFragment3();
return fragment3;
}
就好了,它调用的所有片段也是如此。
sharedPreferences
我可以向左滚动并转到下面看到的片段TestFragment2.java ....但是它没有阅读,或者我正在使用TestFragment2.java
内 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View myView = inflater.inflate(R.layout.fragment_2, container, false);
text = (TextView)myView.findViewById(R.id.textView1);
et = (TextView)myView.findViewById(R.id.textView3);
cb = (CheckBox) myView.findViewById(R.id.checkBox1);
loadPrefs();
return myView;
}
private void loadPrefs() {
SharedPreferences sp = getActivity().getSharedPreferences("CHECKBOX", 0);
boolean cbValue = sp.getBoolean("CHECKBOX", false);
String name = sp.getString("NAME", "YourName");
if(cbValue){
cb.setChecked(true);
}else{
cb.setChecked(false);
}
et.setText(name);
}
进行非常翘头移动
TestFragment2.java
TestFragment2.java
在textView
我试图阅读并通过'setText();'申请Settings.java
sharedPreferences与我在Settings.java
上的方式相同。 String name = sp.getString("NAME", "YourName");
中的代码确实有效,sharedPreference
它会加载TestFragmnet2.java
并显示用户上次运行应用程序时输入的名称,但在String name = sp.getString("NAME", "YourName");
中显示相同的代码块从{{1}}
非常感谢任何帮助,谢谢!!
答案 0 :(得分:8)
我认为你在打电话
SharedPreferences sp = getActivity().getSharedPreferences("CHECKBOX", 0);
错误地在TestFragment2的loadPrefs()
方法
从docs第一个参数(名称)是:
所需的偏好文件。如果此名称的首选项文件没有 存在,它将在您检索编辑器时创建 (SharedPreferences.edit())然后提交更改(Editor.commit())。
所以看起来你在TestFragment2中创建了一个名为“CHECKBOX”的新偏好文件。
可能会将loadPrefs()
更改为与Settings.java中相同的用法,因此您可以调用之前使用的相同首选项,如下所示:
private void loadPrefs() {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity())
boolean cbValue = sp.getBoolean("CHECKBOX", false);
String name = sp.getString("NAME", "YourName");
if(cbValue){
cb.setChecked(true);
}else{
cb.setChecked(false);
}
et.setText(name);
}