1

我到处找,但找不到我要找的东西。

我正在尝试使用 a 的Chronometer内部为 android 制作秒表应用程序Fragment,但在setOnClickListener某些按钮上出现错误。

它是括号“()”fx中的变量。( mStartListener),我得到错误mStartListener cannot be resolved to a variable

请帮助我,我真的很想进入android开发。谢谢

这是代码

b = (Button) getView().findViewById(R.id.start);
b.setOnClickListener(mStartListener); //--- error
b = (Button) getView().findViewById(R.id.stop);
b.setOnClickListener(mStopListener); //--- error
b = (Button) getView().findViewById(R.id.reset);
b.setOnClickListener(mResetListener); //--- error

完整代码:

import android.app.Fragment;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;

public class StopWatchFragment extends Fragment {

    Chronometer mChronometer;

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

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.stopwatch, container, false);

        Button b;
        mChronometer = (Chronometer) getView().findViewById(R.id.chronometer);
        // Watch for button clicks.
        b = (Button) getView().findViewById(R.id.start);
        b.setOnClickListener(mStartListener); //--- error
        b = (Button) getView().findViewById(R.id.stop);
        b.setOnClickListener(mStopListener); //--- error
        b = (Button) getView().findViewById(R.id.reset);
        b.setOnClickListener(mResetListener); //--- error


        return view;


    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());
    }
    };
}
}
4

2 回答 2

1

移动将每个 Listener 声明为类变量的位置:

public class StopWatchFragment extends Fragment {

    Chronometer mChronometer;
    View.OnClickListener mStartListener;
    ...

或者在您尝试使用它们之前声明您的听众:

Button b;
mChronometer = (Chronometer) getView().findViewById(R.id.chronometer);

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

// Watch for button clicks.
b = (Button) getView().findViewById(R.id.start);
b.setOnClickListener(mStartListener); //--- no more error
于 2012-09-23T16:52:18.887 回答
0

在尝试将它们设置为 OnClickListener之后,您正在定义和初始化方法mStopListener内部。onCreateView

您应该将它们移到方法的开头:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.stopwatch, container, false);
   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());
        }
    };
    Button b;
    mChronometer = (Chronometer) getView().findViewById(R.id.chronometer);
    // Watch for button clicks.
    b = (Button) getView().findViewById(R.id.start);
    b.setOnClickListener(mStartListener); //--- error
    b = (Button) getView().findViewById(R.id.stop);
    b.setOnClickListener(mStopListener); //--- error
    b = (Button) getView().findViewById(R.id.reset);
    b.setOnClickListener(mResetListener); //--- error

    return view;



}

或者,将它们作为全局变量放在您的方法之外。

于 2012-09-23T16:55:41.957 回答