0

我想在底部导航活动的片段中添加秒表,但 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 显示无效的方法声明、缺少方法主体等......请帮助!

4

2 回答 2

1

在 OnCreateView 里面添加 View view = inflater.inflate(R.layout.fragment_stopwatch, null); 计时器 = view.findViewById**(R.id.cm)

于 2020-07-03T16:20:43.090 回答
1

findViewById必须在方法内部声明。在您的情况下,它不在任何已声明的范围内。

在开头声明该行startChronometer应该有效:

public void startChronometer(View view)
{
    chronometer = **findViewById**(R.id.cm);
    if (!running){
        chronometer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
        chronometer.start();
        running = true;
    }
}
于 2020-07-03T16:18:36.627 回答