繁体   English   中英

如何将sharedPreferences数据设置为textview?

[英]How can I set sharedPreferences data to a textview?

我在android studio中进行设置活动,用户将在文本框中输入名称。 他们将单击“保存”并转到另一个活动,其名称将显示在文本视图中。 我有麻烦试图让名称显示在TextView的,我已经尝试了一些不同的事情,已经得到了几个不同的错误,它可能是一些简单的我没有收到或远眺。 这是我的错误+代码

public class ActivityDuel extends AppCompatActivity {


public static String getPrefs(String n, Context context) {
    final TextView txtD1 = (TextView) getView().findViewById(R.id.txtD1);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(n, "name");
    txtD1.setText(n);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



}

}

我的错误是:

error: non-static method <T>findViewById(int) cannot be referenced from a static context
where T is a type-variable:
T extends View declared in method <T>findViewById(int)

删除静态关键字并返回您保存的字符串

public String getPrefs(String n, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(n, "name");
}

在您的OnCreate上

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    final TextView txtD1 = (TextView) findViewById(R.id.txtD1);
    txtD1.setText(getPrefs("your_key", this));

}

只是想添加其他答案来解释为什么这行不通-问题是您在getPrefs方法上使用static关键字。

由于getPrefs是静态方法,因此它属于ActivityDuel ,但不属于ActivityDuel 实例 因此它无法引用您的TextView,因为这是活动实例的一部分。

这是Java中静态的一个很好的解释

尝试以这种方式实现它:

public class ActivityDuel extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    TextView txtD1 = (TextView) findViewById(R.id.txtD1);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    String string = preferences.getString(n, "name");
    setSupportActionBar(toolbar);

    txtD1.setText(string);




  }  
}

假设您在活动中有一个静态片段内部类:您正试图调用该活动的findViewById(),而在一个不包含对父级引用的静态内部类中,您将无法调用它。

在onCreateView()中,您需要在刚膨胀的根视图上调用它。

你可以试试看

public class ActivityDuel extends AppCompatActivity {


public String getPrefs(String n, Context context) {
    final  TextView txtD1 = (TextView) rootView.findViewById(R.id.txtD1);
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(n, "name");
    txtD1.setText(n);

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_duel);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);



}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM