如何在 onCreate 中调用方法(应用程序启动时)
How to call methods in onCreate (when the app starts)
我 MainActivity.class 有一些方法。
这是我想在应用程序启动时调用的方法:
public void loadGame(View view) {
SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
cashView.setText("cash: " + String.valueOf(cash));
levelView.setText("level: " + String.valueOf(level));
}
所以我尝试在我的 onCreate 方法中输入以下内容:
loadGame();
但是我得到一个错误:
(View) in MainActivity 无法应用于 ()
抱歉提出这样一个愚蠢的问题,但我不明白。
我认为 onCreate 和其他 activity 方法类似于 Java 中的主要方法(但它们不是),但我仍然可以轻松地为 Button onClick 分配一个方法。为什么我不能在应用程序启动时调用方法?有什么解决办法吗?
更新:MainActivity 代码:
public class MainActivity extends AppCompatActivity {
private int cash = 1000;
private int level = 1;
private TextView cashView;
private TextView levelView;
public static final String PREFS = "MySavedGameFile";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//the compiler says it cannot resolve symbol 'view'
// loadGame(view);
//I need to call the method anyway
cashView = (TextView) findViewById(R.id.cashView);
levelView = (TextView) findViewById(R.id.levelView);
}
public void loadGame(View view) {
SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
cash = loadGame.getInt("savedCash", 1000);
level = loadGame.getInt("savedLevel", 1);
cashView.setText("Cash: " + String.valueOf(cash));
levelView.setText("Level: " + String.valueOf(level));
您的代码的问题是您正在定义一个带有签名的方法,但使用另一个方法来调用它..
如果你定义一个方法public void loadGame(View view)
那么你需要这样称呼它 loadGame(view)
如果你做类似loadGame();
的事情,那么编译器就会发疯,因为他找不到那个方法(一个没有参数的方法......)
快速修复:
替换将视图(无论它是什么)添加到方法调用
更新:
你可以替换方法public void loadGame(View view) {
对于此 public void loadGame( ) {
因为您没有在该方法中使用任何视图,并且在 oncreate 中没有声明视图(控件 cashView 和 levelView 除外,但它们是 Activity 字段...)声明。
您的最终代码应如下所示:
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cashView = (TextView) findViewById(R.id.cashView);
levelView = (TextView) findViewById(R.id.levelView);
loadGame( );
}
public void loadGame() {
SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
cash = loadGame.getInt("savedCash", 1000);
level = loadGame.getInt("savedLevel", 1);
cashView.setText("Cash: " + String.valueOf(cash));
levelView.setText("Level: " + String.valueOf(level));
}
您需要将 View 对象作为参数传递给 loadGame()
方法。考虑到您不在方法中使用 view
,您可以将其作为参数删除,或者创建一个不带参数的同名新方法。
我 MainActivity.class 有一些方法。 这是我想在应用程序启动时调用的方法:
public void loadGame(View view) {
SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
cashView.setText("cash: " + String.valueOf(cash));
levelView.setText("level: " + String.valueOf(level));
}
所以我尝试在我的 onCreate 方法中输入以下内容:
loadGame();
但是我得到一个错误: (View) in MainActivity 无法应用于 ()
抱歉提出这样一个愚蠢的问题,但我不明白。 我认为 onCreate 和其他 activity 方法类似于 Java 中的主要方法(但它们不是),但我仍然可以轻松地为 Button onClick 分配一个方法。为什么我不能在应用程序启动时调用方法?有什么解决办法吗?
更新:MainActivity 代码:
public class MainActivity extends AppCompatActivity {
private int cash = 1000;
private int level = 1;
private TextView cashView;
private TextView levelView;
public static final String PREFS = "MySavedGameFile";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//the compiler says it cannot resolve symbol 'view'
// loadGame(view);
//I need to call the method anyway
cashView = (TextView) findViewById(R.id.cashView);
levelView = (TextView) findViewById(R.id.levelView);
}
public void loadGame(View view) {
SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
cash = loadGame.getInt("savedCash", 1000);
level = loadGame.getInt("savedLevel", 1);
cashView.setText("Cash: " + String.valueOf(cash));
levelView.setText("Level: " + String.valueOf(level));
您的代码的问题是您正在定义一个带有签名的方法,但使用另一个方法来调用它..
如果你定义一个方法public void loadGame(View view)
那么你需要这样称呼它 loadGame(view)
如果你做类似loadGame();
的事情,那么编译器就会发疯,因为他找不到那个方法(一个没有参数的方法......)
快速修复:
替换将视图(无论它是什么)添加到方法调用
更新:
你可以替换方法public void loadGame(View view) {
对于此 public void loadGame( ) {
因为您没有在该方法中使用任何视图,并且在 oncreate 中没有声明视图(控件 cashView 和 levelView 除外,但它们是 Activity 字段...)声明。
您的最终代码应如下所示:
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cashView = (TextView) findViewById(R.id.cashView);
levelView = (TextView) findViewById(R.id.levelView);
loadGame( );
}
public void loadGame() {
SharedPreferences loadGame = getSharedPreferences(PREFS, MODE_PRIVATE);
cash = loadGame.getInt("savedCash", 1000);
level = loadGame.getInt("savedLevel", 1);
cashView.setText("Cash: " + String.valueOf(cash));
levelView.setText("Level: " + String.valueOf(level));
}
您需要将 View 对象作为参数传递给 loadGame()
方法。考虑到您不在方法中使用 view
,您可以将其作为参数删除,或者创建一个不带参数的同名新方法。