Я хотел добавить секундомер во фрагмент с активностью нижней навигации, но findviewbyid показывает ошибку. Как решить?

Я хотел добавить секундомер во фрагмент с активностью нижней навигации, но findviewbyid показывает ошибку. Я пробовал View.... и getView(), но ничего не работает. Подскажите пожалуйста какое решение проблемы.

import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Chronometer;

public class StopwatchFragment extends Fragment {

    private StopwatchFragment(){
    }
    private Chronometer chronometer;
    private boolean running;
    private long pauseOffset;

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
            Bundle savedInstanceState ){
        return inflater.inflate(R.layout.fragment_stopwatch, null);
    }

    chronometer = **findViewById**(R.id.cm);
    public void startChronometer(View view){
        if (!running){
            chronometer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
            chronometer.start();
            running = true;
        }
    }

    public void pauseChronometer(View view){
        if (running){
            chronometer.stop();
            pauseOffset = SystemClock.elapsedRealtime() - chronometer.getBase();
            running = false;
        }
    }

    public void resetChronometer(View view){
        chronometer.setBase(SystemClock.elapsedRealtime());
        pauseOffset = 0;
    }
}

Это мой код Java, где findViewById показывает недопустимое объявление метода, отсутствует тело метода и т. Д. Пожалуйста, помогите!

2 ответа

Внутри OnCreateView добавьте View view = inflater.inflate(R.layout.fragment_stopwatch, null); хронометр = view.findViewById**(R.id.cm)

findViewByIdдолжен быть объявлен внутри метода. В вашем случае он вне заявленного.

Объявление этой строки в начале startChronometer должно сработать:

public void startChronometer(View view)
{
    chronometer = **findViewById**(R.id.cm);
    if (!running){
        chronometer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
        chronometer.start();
        running = true;
    }
}
Другие вопросы по тегам