[英]How do I set counter in SharedPreferences to save and retrieve data from TextView with button click
[英]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,因为这是活动实例的一部分。
尝试以这种方式实现它:
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.