GridLayout gridLayout = findViewById (R.id.gridLayout); вылетает мое приложение - PullRequest
0 голосов
/ 29 июня 2018

Всякий раз, когда я хочу найти свой макет сетки по идентификатору, приложение запускается сразу после запуска. Это не опечатка (я не получаю ошибок компиляции).

Это первое, что я объявил в методе onCreate, поэтому он не падает, потому что какой-то другой метод попытается что-то сделать с макетом до вызова findViewById.

В чем может быть причина?

(я пытался изменить его идентификатор, имя ... не работает)

Часть кода:

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}

Ответы [ 4 ]

0 голосов
/ 14 июля 2018

findViewbyId изменено в Android Studio 3. *

см

findViewById() изменение подписи Все экземпляры метода findViewById() теперь возвращают <T extends View> T вместо View. Это изменение имеет следующие последствия:

Это может привести к тому, что существующий код теперь будет иметь неоднозначный тип возврата, например, если есть и someMethod(View), и someMethod(TextView), который принимает результат вызова findViewById(). При использовании исходного языка Java 8 для этого требуется явное приведение к View, когда возвращаемый тип не ограничен (например, assertNotNull(findViewById(...)).someViewMethod()). Переопределения не финальных findViewById() методов (например, Activity.findViewById()) потребуется обновить тип возвращаемого значения.

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

Я новый ученик Android. Непосредственно пробуя коды видео в моем обучении

0 голосов
/ 29 июня 2018

Либо разыграй, как А. Эль Саид упомянул в своем ответе

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

или опубликуйте свой XML-код также потому, что иногда в вашем XML-коде может быть какая-то опечатка или, возможно, вы используете grid layout id, отличный от того, который определен в XML

0 голосов
/ 30 июня 2018

Мне пришлось изменить кастинг с этого:

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

К этому:

android.support.v7.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);
0 голосов
/ 29 июня 2018

Измените

от

gridLayout = findViewById(R.id.gridLayout);

до

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

Вы должны разыграть результат из findViewById function

...