Java Android如何从首选项对象设置和检索数据
我正在处理一个首选项片段,其中一个首选项是选择一个外部图像文件作为应用程序背景 我尝试将文件路径字符串保存到相应的首选项,以便在应用程序启动时可以从Java Android如何从首选项对象设置和检索数据,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在处理一个首选项片段,其中一个首选项是选择一个外部图像文件作为应用程序背景 我尝试将文件路径字符串保存到相应的首选项,以便在应用程序启动时可以从SharedReferences加载该路径数据 我的问题是,当使用Preference类而不是EditTextPreference时,没有setText()方法来保存路径值,并且我无法理解如何将数据存储到Preference对象上,然后在我的活动中通过SharedReferences.getString(“key”),检索 如果我改用EditText
SharedReferences
加载该路径数据
我的问题是,当使用Preference
类而不是EditTextPreference
时,没有setText()
方法来保存路径值,并且我无法理解如何将数据存储到Preference
对象上,然后在我的活动中通过SharedReferences.getString(“key”),检索
如果我改用EditTextPreference
,它确实可以工作,但我必须禁用或自定义EditTextPreference
的对话框组件,因为我需要启动一个新的活动以在点击此首选项时拾取图像
我注意到在官方文档中,他们在一起使用intent时使用了首选项
。有没有办法将数据保存到首选项
对象,然后在活动中检索该数据
//在首选项片段中
私人偏好bgPref;
@凌驾
活动结果的公共无效性(
int requestCode,int resultCode,@Nullable Intent data){
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK&&data!=null){
Uri imageUri=data.getData();
最终字符串路径=getFilePath(requireContext(),imageUri);
if(路径!=null){
bgPref.setText(path);//如何为首选项设置字符串值?
Drawable d=Drawable.createFromPath(路径);
if(containerView!=null){
集装箱视野后退(d);
}
}
}否则{
Toast.makeText(requireContext(),“您还没有选择图像”,Toast.LENGTH\u LONG.show();
}
}
//主要活动
SharedPreferences SharedPrefers=PreferenceManager.getDefaultSharedPreferences(此);
String bgPath=sharedPrefs.getString(“bgPath”,”);
Drawable d=Drawable.createFromPath(bgPath);
如果(!bgPath.isEmpty())找到dviewbyd(R.id.nav_host_fragment).setBackground(d);
//...
您可以直接编辑此首选项。在onActivityResult()中的
您尝试过这个->吗?我不知道如何将数据存储到首选项对象上,然后通过SharedReferences.getString(“key”),检索数据。
??如果您以后想从共享首选项中检索数据,您应该将数据保存到共享首选项中。谢谢您的回复,我理解您的观点,实际上它正在我的片段文件中使用此代码,我只是想知道是否有类似于EditTextPreference
的setText
<代码>首选项管理器.getDefaultSharedReferences(requireContext()).edit().putString(“bgPath”,path).apply()
和首选项
和编辑文本首选项
都是UI类,不是存储数据的方式s文件。您可以阅读如何在Android中存储数据。如果您希望路径字符串在您的首选项下可见,您只需将所选路径设置为该首选项的摘要。
@Override
public void onActivityResult(
int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
Uri imageUri = data.getData();
final String path = getFilePath(requireContext(), imageUri);
if (path != null) {
// Save preference here
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString("bgPath", path);
editor.apply();
// Now recreate activity to refresh the UI
requireActivity().recreate();
// In onCreateView, you can use this preference to set background
}
} else {
Toast.makeText(requireContext(), "You haven't picked Image", Toast.LENGTH_LONG).show();
}
}
}