GridLayout gridLayout = findViewById(R.id.gridLayout);崩溃我的应用程序
GridLayout gridLayout = findViewById(R.id.gridLayout); crashes my app
每当我想通过 ID 查找我的网格布局时,我的应用程序会在启动时立即崩溃。这不是错字(我没有遇到任何编译错误)。
这是我在 onCreate
方法中声明的第一件事,因此它不会崩溃,因为其他方法会在 findViewById
被调用之前尝试对布局做一些事情。
可能是什么原因?
(我尝试更改它的 ID、名称...没有用)
部分代码:
public class MainActivity extends AppCompatActivity {
TextView countdownView, expressionView, scoreView, resultView, goView;
LinearLayout linearLayout;
GridLayout gridLayout;
CountDownTimer countDownTimer;
Random randomGenerator;
Button startGameButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridLayout = findViewById(R.id.gridLayout);
//other code here}
改变它
来自
gridLayout = findViewById(R.id.gridLayout);
到
gridLayout = (GridLayout) findViewById(R.id.gridLayout);
您应该转换 findViewById
函数的结果
要么像 A.El Saeed 在他的回答中提到的那样投射
gridLayout = (GridLayout)findViewById(R.id.gridLayout);
或 post 您的 XML 代码也是因为有时您的 XML 代码中可能会有一些拼写错误,或者您可能使用了不同的 grid layout id
比 XML
中定义的
我不得不从这里更改演员表:
GridLayout gridLayout = findViewById(R.id.gridLayout);
为此:
android.support.v7.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);
findViewbyId
在 android 工作室 3 中更改。*
参考
findViewById()
签名更改
findViewById()
方法的所有实例现在 return <T extends View> T
而不是 View
。此更改具有以下含义:
这可能会导致现有代码现在具有不明确的 return 类型,例如,如果同时存在 someMethod(View)
和 someMethod(TextView)
来获取调用 [=12= 的结果].
当使用 Java 8 源语言时,这需要在 return 类型不受约束时显式转换为 View(例如,assertNotNull(findViewById(...)).someViewMethod())
。
覆盖非最终 findViewById()
方法(例如,Activity.findViewById())
需要更新其 return 类型。
EditText message=super.findViewById(R.id.txtmessage);
我是一名新 android 学习者。学习中直接试用视频代码
用这个
替换你的行
androidx.gridlayout.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);
每当我想通过 ID 查找我的网格布局时,我的应用程序会在启动时立即崩溃。这不是错字(我没有遇到任何编译错误)。
这是我在 onCreate
方法中声明的第一件事,因此它不会崩溃,因为其他方法会在 findViewById
被调用之前尝试对布局做一些事情。
可能是什么原因?
(我尝试更改它的 ID、名称...没有用)
部分代码:
public class MainActivity extends AppCompatActivity {
TextView countdownView, expressionView, scoreView, resultView, goView;
LinearLayout linearLayout;
GridLayout gridLayout;
CountDownTimer countDownTimer;
Random randomGenerator;
Button startGameButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridLayout = findViewById(R.id.gridLayout);
//other code here}
改变它
来自
gridLayout = findViewById(R.id.gridLayout);
到
gridLayout = (GridLayout) findViewById(R.id.gridLayout);
您应该转换 findViewById
函数的结果
要么像 A.El Saeed 在他的回答中提到的那样投射
gridLayout = (GridLayout)findViewById(R.id.gridLayout);
或 post 您的 XML 代码也是因为有时您的 XML 代码中可能会有一些拼写错误,或者您可能使用了不同的 grid layout id
比 XML
我不得不从这里更改演员表:
GridLayout gridLayout = findViewById(R.id.gridLayout);
为此:
android.support.v7.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);
findViewbyId
在 android 工作室 3 中更改。*
参考
findViewById()
签名更改
findViewById()
方法的所有实例现在 return <T extends View> T
而不是 View
。此更改具有以下含义:
这可能会导致现有代码现在具有不明确的 return 类型,例如,如果同时存在 someMethod(View)
和 someMethod(TextView)
来获取调用 [=12= 的结果].
当使用 Java 8 源语言时,这需要在 return 类型不受约束时显式转换为 View(例如,assertNotNull(findViewById(...)).someViewMethod())
。
覆盖非最终 findViewById()
方法(例如,Activity.findViewById())
需要更新其 return 类型。
EditText message=super.findViewById(R.id.txtmessage);
我是一名新 android 学习者。学习中直接试用视频代码
用这个
androidx.gridlayout.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);