Android:我的页面(Fragment)显示登录页面(Activity)的用户名

如题目所示,“登录页面”是用Activity做的,而整个底部导航栏乃至“我的页面”是用Fragment做的,乍一看没毛病。喵的,越往后做越离谱!

首先,第一个问题就是:Fragment包下没有 SharedPreferences,不能直接使用

解决方法:用getActivity() 方法获取所依附的 Activity,并从该 Activity 中获取 SharedPreferences 对象,进而间接使用 getSharedPreferences 方法。大致是以下这个样子滴~

 private static final String PREFS_NAME = "MyPrefs";
 private static final String KEY_USERNAME = "username";

 Activity activity = getActivity();
 SharedPreferences Sf = activity.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
 SharedPreferences.Editor editor = Sf.edit();
 editor.putString("username", KEY_USERNAME);
 editor.apply();

其次,我又傻乎乎的去封装了一个SharedPreferencesUtils类,真的,像我这种写起代码来不管三七二十一,不知道有几人?如下:

public static String getUsername(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        return sharedPreferences.getString(KEY_USERNAME, "");
    }

再次重申,"我的页面"是用Fragment做的,有没有看到getUsername中的参数?好的,没错,Fragment还得需要getContext() 方法获取到与该 Fragment 相关联的上下文 Context,继而使用这个上下文来调用 SharedPreferencesUtils.getUsername() 方法。

以下是让用户名显示在"我的"页面中的完整例子:

public class SharedPreferencesUtils {
    private static final String PREFS_NAME = "MyPrefs";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_PASSWORD = "password";
    
    public static void saveUsernameAndPassword(Context context, String username,String password) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(KEY_USERNAME, username);
        editor.putString(KEY_PASSWORD,password);
        editor.apply();
    }

    public static String getUsername(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        return sharedPreferences.getString(KEY_USERNAME, "");
    }

    public static String getPassword(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        return sharedPreferences.getString(KEY_PASSWORD, "");
    }

    public static void clearCredentials(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS_NAME, 
          Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.remove(KEY_USERNAME);
        editor.remove(KEY_PASSWORD);
        editor.apply();
    }
}
//获取id
TextView textViewUsername = view.findViewById(R.id.my_name);
//调用Utils类中的方法,让用户名显示
textViewUsername.setText(SharedPreferencesUtils.getUsername(getContext()));

最后看一下效果图:

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值