有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在一个片段中存储数据以在另一个片段中获取数据?

我正在共享首选项类中存储一个字符串,我想在另一个片段中使用这个字符串

我认为我在上下文、应用程序上下文方面做了一些错误的事情。 我不知道上下文的事情。 每当我打开个人资料片段时,应用程序就会崩溃

共享偏好类

public class SharedPrefs {
private static final String myPrefs = "myprefs";
private static final String LogedInKey = "Key";
private final Context context;
private final SharedPreferences sharedPreferences;
private final SharedPreferences.Editor editor;


public SharedPrefs(Context context) {
    this.context = context;
    sharedPreferences = context.getSharedPreferences(myPrefs, Context.MODE_PRIVATE);
    editor = sharedPreferences.edit();
}

public void savePref(String key) {
    editor.putString(LogedInKey, key);
    editor.commit();
}

public String getLogedInKey() {
    return sharedPreferences.getString(LogedInKey, null);
}

public void clearLogin() {
    editor.putString(LogedInKey, null);
    editor.commit();
}}

我的个人资料片段:

public class ProfileFragment extends Fragment {
private Context context;
private SharedPrefs sharedPrefs=new SharedPrefs(context);

public ProfileFragment(Context context) {
    this.context = context;
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_profile, null);
    TextView userName=view.findViewById(R.id.userName);
    String a=sharedPrefs.getLogedInKey();
    userName.setText(a);

    return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);


}}

我只想将共享引用中的字符串设置为TextView


共 (3) 个答案

  1. # 1 楼答案

    尝试使用

    在onCreateView()中

    context=getActivity()。getApplicationContext()

  2. # 2 楼答案

    一,。实际上,您不需要将上下文作为片段构造函数传递,因为这是不对的,而且它不会工作

        public class ProfileFragment extends Fragment {
        private SharedPrefs sharedPrefs;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
        sharedPrefs=new SharedPrefs(getActivity());
        View view = inflater.inflate(R.layout.fragment_profile, null);
        TextView userName=view.findViewById(R.id.userName);
        String a=sharedPrefs.getLogedInKey();
        userName.setText(a);
    
          return view;
        }
        @Override
    
        public void onViewCreated(@NonNull View view, @Nullable Bundle                  
        savedInstanceState) {
       super.onViewCreated(view, savedInstanceState);
    
       }}
    
  3. # 3 楼答案

    在构造函数中定义SharedReference:

    public ProfileFragment(Context context) {
    this.context = context;
    sharedPrefs=new SharedPrefs(context);
    }
    

    确保你保存了一些记录了密钥的东西