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);