我在android studio中进行设置活动,用户将在文本框中输入名称。他们将单击“保存”并转到另一个活动,其名称将显示在文本视图中。我在尝试显示在文本视图中的名称时遇到了麻烦,我尝试了一些不同的操作,并且遇到了一些不同的错误,这很可能是我没有得到或忽略的事情。这是我的错误+代码
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)
答案 0 :(得分:2)
删除静态关键字并返回您保存的字符串
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));
}
答案 1 :(得分:2)
只想添加其他答案以解释为什么这行不通-问题是您在static
方法上使用了getPrefs
关键字。
由于getPrefs
是静态方法,因此它属于ActivityDuel
类,但不属于ActivityDuel
实例。因此它无法引用您的TextView,因为这是活动实例的一部分。
答案 2 :(得分:0)
尝试通过这种方式实现:
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);
}
}
答案 3 :(得分:0)
假设您在活动中有一个静态片段内部类:您正在尝试调用该活动的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);
}
}