首页 > 解决方案 > 我想在片段中添加秒表,但应用程序在单击图像按钮时崩溃。如何解决?

问题描述

我想在底部导航活动的片段中添加秒表。我没有收到任何错误,但应用程序在单击我为开始暂停和重置创建的图像按钮时崩溃。请帮忙!

package com.example.chatapp;

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;
import android.widget.ImageButton;

public class StopwatchFragment extends Fragment {
    private boolean running;
    private long pauseoffset;
    private Chronometer chronometer;

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
            Bundle savedInstanceState ){
        View view = inflater.inflate(R.layout.fragment_stopwatch, null);
        chronometer = view.findViewById(R.id.cm);
        return view;
    }
    public void startcm (View view){
        if (!running){
            chronometer.setBase(SystemClock.elapsedRealtime() - pauseoffset);
            chronometer.start();
            running = true;
        }
    }

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

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

这是我的那个片段的java代码。Android Studio 在这方面没有显示任何错误。

但是在我的那个片段的 xml 代码中。在onclick前面显示

  1. 无法解析符号名称“startcm”
  2. 无法解析符号名称“pausecm”
  3. 无法解析符号名称“restartcm”
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".StopwatchFragment">

    <TextView
        android:id="@+id/text_stopwatch"
        android:textAlignment="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/title_stopwatch"
        android:fontFamily="@font/bold"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:gravity="center_horizontal" />

    <Chronometer
        android:id="@+id/cm"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginTop="68dp"
        android:fontFamily="@font/bold"
        android:textSize="60sp"
        android:textColor="@color/colorPrimary"
        android:textAlignment="center"/>

    <ImageButton
        android:id="@+id/start"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/ic_play_arrow_black_24dp"
        android:background="@drawable/circular_button"
        android:tint="#fff"
        android:layout_marginTop="175dp"
        android:layout_marginLeft="50dp"
        android:onClick="startcm"/>

    <TextView
        android:id="@+id/text_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/start"
        android:layout_marginTop="225dp"
        android:layout_marginLeft="60dp"
        android:textColor="@color/black"
        android:fontFamily="@font/regular"
        />

    <ImageButton
        android:id="@+id/pause"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/ic_pause_black_24dp"
        android:background="@drawable/circular_button"
        android:tint="#fff"
        android:layout_marginTop="175dp"
        android:layout_marginLeft="150dp"
        android:onClick="pausecm"/>

    <TextView
        android:id="@+id/text_pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pause"
        android:layout_marginTop="225dp"
        android:layout_marginLeft="157dp"
        android:textColor="@color/black"
        android:fontFamily="@font/regular"
        />

    <ImageButton
        android:id="@+id/reset"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/restart"
        android:background="@drawable/circular_button"
        android:tint="#fff"
        android:layout_marginTop="175dp"
        android:layout_marginLeft="250dp"
        android:onClick="resetcm"/>

    <TextView
        android:id="@+id/text_reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/reset"
        android:layout_marginTop="225dp"
        android:layout_marginLeft="258dp"
        android:textColor="@color/black"
        android:fontFamily="@font/regular"
        />

</RelativeLayout>

请帮忙!!!

标签: javaandroidandroid-studioandroid-fragments

解决方案


xml标签在您的ActivityonClick中查找您的函数,而不是在您的片段中。大概有3个解决方案:

  • 将这些功能移至您的 Activity

  • 添加view.findViewById(R.id.cmstart).setOnClickListener()到您的片段,并删除 xml 标记。

  • 您可以在 xml 标记中添加对您的片段的引用,但我不知道该怎么做。


推荐阅读