无法解决制作秒表时的符号问题

Cannot resolve symbol issues in making a stopwatch

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

好的,我用一些更正更新了文件,现在我没有更多关于 start/stop 的错误,但是我有关于 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>

感谢任何人提供的帮助!

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

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

import android.R;

将其替换为

import your.package.R;

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

更新 :

当我说your.package.R时,它只是一个例子。该包取决于您在创建项目时选择的内容,但根据您提供的代码判断,您可能需要导入 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 代表 "member",表示 class 的成员变量,而不是方法内部的变量。由于您的侦听器仅在方法内部声明,因此我们通常不使用 mListener,而是使用 listener。当然,这只是一个命名约定,不会妨碍代码编译和 运行 ;)