на нестатический метод <T>findViewById (int) нельзя ссылаться из статического контекста - PullRequest
0 голосов
/ 15 декабря 2018

Мое первое приложение работает нормально само по себе, но сейчас я пытаюсь добавить вкладки после урока, но я застрял.Я искал, и у многих пользователей была такая же проблема, я пробовал эти решения, но все еще не мог заставить его работать нормально.

Мое приложение

package es.ea1ddo.antenacubica;

import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        frecuencia = findViewById(R.id.frecuencia);
        cal3el = (Button) findViewById(R.id.calcular3);

И вот теперь я пытаюсь скопировать предыдущее приложение

package es.ea1ddo.calculadoraantenascubicas;

public class TabFragment2 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        View v= inflater.inflate(R.layout.tab_fragment_2, container, false);

        frecuencia = EditText.findViewById(R.id.frecuencia);
        cal3el = (Button) getView().findViewById(R.id.calcular3);

Я искал вокруг, пробовал много примеров и разных способов, но я застрял.Вы можете видеть, что я добавил getView().перед каждым findViewById, но я все еще получаю ту же ошибку:

Нестатический метод findViewById (int) не может быть вызван из статического контекста, где T является переменной типа: T расширяет View, объявленный вМетод findViewById (int)

Пожалуйста, совет?Спасибо

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

заменить

frecuencia = EditText.findViewById(R.id.frecuencia);
cal3el = (Button) getView().findViewById(R.id.calcular3);

на

recuencia = (EditText) v.findViewById(R.id.frecuencia);
cal3el = (Button) v.findViewById(R.id.calcular3);

, если не работает, пожалуйста, добавьте полный XML-код в свой вопрос

0 голосов
/ 15 декабря 2018

В вашем фрагменте кода у вас есть две проблемы.

Первая, как уже отмечали другие, заключается в том, что View.findViewById() - это нестатический метод, поэтому вы должны вызывать его как myView.findViewById() какв отличие от EditText.findViewById().

Второй относится к тому, как работает метод Фрагмента getView().Этот метод работает только после того, как onCreateView() вернулось, потому что getView() возвращает то, что вернул onCreateView().Это означает, что вы не можете позвонить getView() изнутри onCreateView();он всегда будет возвращать null.

Собран вместе, ваш код должен выглядеть следующим образом:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View v= inflater.inflate(R.layout.tab_fragment_2, container, false);

    frecuencia = (EditText) v.findViewById(R.id.frecuencia);
    cal3el = (Button) v.findViewById(R.id.calcular3);
    ...
}
0 голосов
/ 15 декабря 2018

Заменить

EditText.findViewById

на

(ExitText) getView().findViewById

Однако это приведет к исключению NullPointerException.

Вам необходимо переместить любой код, который использует getView(), вonViewCreated(), или вместо v.

...