2013-01-10 43 views
0

我正在編寫Google Maps應用程序,並試圖實現將地圖類型從普通地圖更改爲混合地圖的按鈕。聲明ImageButton以在函數中使用

我宣佈我的按鈕在OnCreate實例:

ImageButton changeBtn =(ImageButton) findViewById(R.id.changeBtn); 
    changeBtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      changeMapType(); 
     } 
    }); 

這是我的功能changeMapType(); :

private void changeMapType(){ 
    if(MapTypeInt == 0){ 
     mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); 
     changeBtn.setBackgroundResource(R.drawable.satellite); 
     MapTypeInt = 1; 
    } else if (MapTypeInt == 1) { 
     mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     changeBtn.setBackgroundResource(R.drawable.normal_map); 
     MapTypeInt = 0; 
    } 
} 

現在的問題,我不能使用的ImageButton「changeBtn」中的onCreate實例外,當我在我的程序代碼頂部聲明按鈕,它會導致程序崩潰。有沒有人有解決這個問題?當我嘗試在類級別聲明它

01-10 10:22:00.555: E/AndroidRuntime(2872): FATAL EXCEPTION: main 
01-10 10:22:00.555: E/AndroidRuntime(2872): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.androidbasic12/com.example.androidbasic12.map}: java.lang.NullPointerException 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.os.Looper.loop(Looper.java:137) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at dalvik.system.NativeStart.main(Native Method) 
01-10 10:22:00.555: E/AndroidRuntime(2872): Caused by: java.lang.NullPointerException 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.Activity.findViewById(Activity.java:1839) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at com.example.androidbasic12.map.<init>(map.java:24) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at java.lang.Class.newInstanceImpl(Native Method) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at java.lang.Class.newInstance(Class.java:1319) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
01-10 10:22:00.555: E/AndroidRuntime(2872):  ... 11 more 

,代碼:類級別聲明時

logcat的

public class map extends FragmentActivity{ 
private static final LatLng SYDNEY = new LatLng(-33.88,151.21); 
public static final LatLng sala = new LatLng(59.91602, 16.594108); 
int travel = 0; 
int MapTypeInt = 0; 
private GoogleMap mMap; 
GoogleMapOptions options = new GoogleMapOptions(); 
ImageButton changeBtn =(ImageButton) findViewById(R.id.changeBtn); 
+0

爲什麼會崩潰?你可以發佈日誌嗎? –

+0

當我在課堂上聲明按鈕級別時,它會崩潰並給出這個logcat –

+0

對不起,我是gona發表評論,但我搞砸了,現在它在那裏。 –

回答

0

如果聲明的onCreate外面的按鈕,你不能將它。您應該將它分配在onCreate中:

changeBtn =(ImageButton) findViewById(R.id.changeBtn); 

然後您可以在函數中使用changeBtn。 由於findViewById不能在setContentView之前使用。