2012-09-23 47 views
1

我查看过无处不在,但找不到要查找的内容。setOnClickListener中的变量无法解析

我试图用一个ChronometerFragment内部,使Android的秒表应用程序,但我对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()); 
    } 
    }; 
} 
} 

回答

1

移动,你声明每个监听器是类变量:

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 
+0

非常感谢你!它的工作,以及我没有得到任何错误,但现在我的应用程序强制关闭,当我启动片段。 – Jakob

+0

不客气。如果您无法发布包含LogCat错误的新问题,请尽力解决Force Close问题。 – Sam

+0

好的再次感谢,我真的很感谢你的帮助 – Jakob

0

您定义和初始化mStopListeneronCreateView方法中,你试图将它们设置为OnClickListener。

你应该将它们移动到你的方法开始:

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; 



} 

或者把他们的方法为全局变量之外。