【问题标题】:Cannot resolve symbol issues in making a stopwatch无法解决制作秒表的符号问题
【发布时间】:2023-03-05 12:42:01
【问题描述】:

(请记住,我对编码非常陌生)我在编写秒表应用程序时遇到了问题,我搜索了这个网站并没有找到解决我的问题的方法,将我的代码与另一个尝试同样的教程,我发现它们是相同的,但是据我所知,我得到了几个未解决的符号,一切都是正确的......

好的,我更新了文件并进行了一些更正,现在我在启动/停止方面没有任何错误,但我在 m(start/stop/etc)Listener 代码方面出现了新错误...

(这是主要的 Activity Java 文件)

package com.jackson.eason.stopwatch.;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import your.package.R;

public class MainActivity extends Activity {
    Chronometer mChronometer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Button button;

        mChronometer = (Chronometer) findViewById(R.id.Chronometer);

        // Watch for button clicks.
        button = (Button) findViewById(R.id.start);
        button.setOnClickListener(mStartListener);

        button = (Button) findViewById(R.id.stop);
        button.setOnClickListener(mStopListener);

        button = (Button) findViewById(R.id.reset);
        button.setOnClickListener(mResetListener);

        button = (Button) findViewById(R.id.set_format);
        button.setOnClickListener(mSetFormatListener);

        button = (Button) findViewById(R.id.clear_format);
        button.setOnClickListener(mClearFormatListener);

        View.OnClickListener mStartListener = new OnClickListener() {
            public void onClick(View v) {
                mChronometer.start();
            }
        };

        View.OnClickListener mStopListener = new OnClickListener() {
            public void onClick(View v) {
                mChronometer.stop();
            }
        };

        View.OnClickListener mResetListener = new OnClickListener() {
            public void onClick(View v) {
                mChronometer.setBase(SystemClock.elapsedRealtime());
            }
        };

        View.OnClickListener mClearFormatListener = new OnClickListener() {
            public void onClick(View v) {
                mChronometer.setFormat(null);
            }
        };
    }


    }

(另外,这是我的 xml 文件,Android 开发人员说没问题)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"
    android:gravity="center_horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Chronometer android:id="@+id/chronometer"
        android:format="@string/chronometer_initial_format"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="0"
        android:paddingBottom="30dip"
        android:paddingTop="30dip"
        />

    <Button android:id="@+id/start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="start">
        <requestFocus />
    </Button>

    <Button android:id="@+id/stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="chronometer_stop">
    </Button>

    <Button android:id="@+id/reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="reset">
        </Button>

    <Button android:id="@+id/set_format"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="format">
    </Button>

    <Button android:id="@+id/clear_format"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="clear_format">
    </Button>

    </LinearLayout>

感谢任何人提供的任何帮助!

【问题讨论】:

  • 导入 import android.R; 错误。这会导入一个不了解您的项目资源的通用 R 版本。

标签: android stopwatch chronometer


【解决方案1】:

您的问题是您导入了错误的R 类。 android.R 不同于为您的应用程序生成并引用您的资源的R 文件,它是框架本身的 R 文件,允许您使用方便的资源,请参见 this question 示例。

import android.R;

替换为

import your.package.R;

此外,正如 Thanos 建议的那样,将您的侦听器声明放在 onCreate 方法中。

更新

当我说your.package.R 时,这只是一个例子。该包取决于您在创建项目时选择的内容,但从您提供的代码来看,您可能需要 import com.jackson.eason.stopwatch.R

其次,您需要先声明您的侦听器,然后再使用它们。如果你不知道,如果你调用setOnClickListener(mClearFormatListener)mClearFormatListener 是在之后声明的,编译器还不知道mClearFormatListener 所以它会显示一个编译错误。下面的代码应该可以工作。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // Get references to views
    mChronometer = (Chronometer) findViewById(R.id.Chronometer);
    Button button1 = (Button) findViewById(R.id.start);
    Button button2 = (Button) findViewById(R.id.stop);
    Button button3 = (Button) findViewById(R.id.reset);
    Button button4 = (Button) findViewById(R.id.set_format);
    Button button5 = (Button) findViewById(R.id.clear_format);

    // Declare the listeners
    View.OnClickListener mStartListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.start();
        }
    };

    View.OnClickListener mStopListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.stop();
        }
    };

    View.OnClickListener mResetListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.setBase(SystemClock.elapsedRealtime());
        }
    };

   // You forgot to declare a listener for set format in your updated code
   View.OnClickListener mSetFormatListener = new OnClickListener() {
        public void onClick(View v) {
            // TODO : set the format
        }
    };

    View.OnClickListener mClearFormatListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.setFormat(null);
        }
    };

    // Assign the listeners to your buttons
    button1.setOnClickListener(mStartListener);
    button2.setOnClickListener(mStopListener);
    button3.setOnClickListener(mResetListener);
    button4.setOnClickListener(mSetFormatListener);
    button.setOnClickListener(mClearFormatListener);


}

最后一件事:在符号mVariable 中,m 代表“成员”,表示类的成员变量,而不是方法内的变量。由于您的侦听器仅在方法内声明,因此我们通常不使用mListener,而是使用listener。当然,这只是一个命名约定,不会妨碍代码编译和运行;)

【讨论】:

  • 非常感谢,现在,我到底用什么来代替“你的”?
  • 好的,所以我在 oncreate 中添加了侦听器,这修复了 start/stop/etc 的错误,但导致所有 m(stop/start/reset/etc)Listener 出现新错误行
  • 您能否用您所做的更改和遇到的错误更新您的问题?我们会到达那里;-)
  • 当然,但是我现在有课,大约 90 分钟后会添加它们
  • 我更新了我的答案。如果您还有问题,请告诉我。
【解决方案2】:

我认为所有的侦听器都应该在一个方法中。我错了吗?尝试将它们放在 onCreate 方法中(在它的最后)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2011-12-19
    • 2023-04-06
    相关资源
    最近更新 更多