GridLayout gridLayout = findViewById(R.id.gridLayout);使我的应用程序崩溃

时间:2018-06-29 17:23:16

标签: android android-layout findviewbyid

每当我想通过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}

5 个答案:

答案 0 :(得分:0)

我不得不从此更改演员表:

GridLayout gridLayout = findViewById(R.id.gridLayout);

对此:

android.support.v7.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);

答案 1 :(得分:0)

findViewbyId在android studio 3中已更改。*

引用

findViewById()签名更改 findViewById()方法的所有实例现在都返回<T extends View> T而不是View。此更改具有以下含义:

这可能会导致现有代码现在具有不明确的返回类型,例如,如果同时存在someMethod(View)someMethod(TextView)来调用findViewById()的结果。 使用Java 8源语言时,当返回类型不受限制时(例如,assertNotNull(findViewById(...)).someViewMethod()),这需要显式转换为View。 非最终findViewById()方法(例如Activity.findViewById()))的覆盖将需要更新其返回类型。

EditText message=super.findViewById(R.id.txtmessage);

我是一名新的android学习者。在我的学习中直接尝试视频代码

答案 2 :(得分:0)

通过此

替换您的行
androidx.gridlayout.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);

答案 3 :(得分:-2)

更改

来自

gridLayout = findViewById(R.id.gridLayout);

gridLayout = (GridLayout) findViewById(R.id.gridLayout);

您应该从findViewById函数强制转换结果

答案 4 :(得分:-2)

要么像他回答中提到的A.El Saeed那样投掷

gridLayout = (GridLayout)findViewById(R.id.gridLayout);

或发布您的XML代码也是因为有时,您的XML代码中可能会出现一些错字,或者您使用的XML grid layout id与XML中定义的不同