2012-09-23 44 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; 



} 

或者把他們的方法爲全局變量之外。