2013-01-15 23 views
1

我正在做一個android應用程序,我正在考慮創建一個主題選項。那麼我想要做的就是讓用戶點擊代表主題的圖像按鈕。當他點擊它時,我開始一個新的活動,即我將他引導到主頁。另外我創建了幾個整數變量,當用戶點擊一個按鈕時,它們被設置爲1。如果導致程序強制關閉的條件

然後在其他類中,我所做的只是檢查變量是否爲1,並取決於我應用的主題。按主題我的意思是我只是改變背景壁紙。但是這不起作用。我的意思是代碼有效,但如果使用if循環來檢查變量值,然後應用效果,則會導致錯誤。

下面是完整的代碼:

package com.example.themetest; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 
import android.widget.LinearLayout; 

public class MainActivity extends Activity implements OnClickListener{ 

    ImageButton ib1; 
    ImageButton ib2; 
    int water=0; 
    int fire=0; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ib1 = (ImageButton) findViewById(R.id.imageButton1); 
     ib2 = (ImageButton) findViewById(R.id.imageButton2); 
     ib1.setOnClickListener(this); 
     ib2.setOnClickListener(this); 



    } 


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

     switch(v.getId()){ 
     case R.id.imageButton1: 
      water = 1; 
      Intent wi = new Intent("com.example.themetest.THEME"); 
      startActivity(wi); 
      break; 

     case R.id.imageButton2: 
      fire = 1; 
      Intent fi = new Intent("com.example.themetest.THEME"); 
      startActivity(fi); 
      break; 
     } 
    } 



} 

下面是其他類,其中i檢查哪些變量設置爲1和應用效果。

package com.example.themetest; 

import java.io.InputStream; 

import android.app.Activity; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.widget.EditText; 
import android.widget.LinearLayout; 

public class Theme extends Activity{ 

    MainActivity main; 
    Resources res; 
    Drawable drawable; 
    LinearLayout linearLayout; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.theme); 

     if(main.water==1){ 


      res = getResources(); 
      drawable = res.getDrawable(R.drawable.water_theme); 
      linearLayout = (LinearLayout)findViewById(R.id.ll); 
      linearLayout.setBackgroundDrawable(drawable); 
      } 
      else if(main.fire==1){ 
       res = getResources(); 
       drawable = res.getDrawable(R.drawable.fire_theme); 
       linearLayout = (LinearLayout)findViewById(R.id.ll); 
       linearLayout.setBackgroundDrawable(drawable); 
     } 
      else{ 
       res = getResources(); 
       drawable = res.getDrawable(R.drawable.ic_launcher); 
       linearLayout = (LinearLayout)findViewById(R.id.ll); 
       linearLayout.setBackgroundDrawable(drawable); 
     } 

    } 



    } 

我可以改變牆紙,而不使用if循環,但我想這樣來做這是行不通的。任何人都可以告訴我爲什麼?

登錄貓:

01-15 12:08:23.339: D/dalvikvm(273): GC_EXTERNAL_ALLOC freed 767 objects/55936 bytes in 235ms 
01-15 12:08:25.539: D/AndroidRuntime(273): Shutting down VM 
01-15 12:08:25.539: W/dalvikvm(273): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
01-15 12:08:25.559: E/AndroidRuntime(273): FATAL EXCEPTION: main 
01-15 12:08:25.559: E/AndroidRuntime(273): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.themetest/com.example.themetest.Theme}: java.lang.NullPointerException 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.os.Looper.loop(Looper.java:123) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.ActivityThread.main(ActivityThread.java:4627) 
01-15 12:08:25.559: E/AndroidRuntime(273): at java.lang.reflect.Method.invokeNative(Native Method) 
01-15 12:08:25.559: E/AndroidRuntime(273): at java.lang.reflect.Method.invoke(Method.java:521) 
01-15 12:08:25.559: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
01-15 12:08:25.559: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
01-15 12:08:25.559: E/AndroidRuntime(273): at dalvik.system.NativeStart.main(Native Method) 
01-15 12:08:25.559: E/AndroidRuntime(273): Caused by: java.lang.NullPointerException 
01-15 12:08:25.559: E/AndroidRuntime(273): at com.example.themetest.Theme.onCreate(Theme.java:29) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-15 12:08:25.559: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
01-15 12:08:25.559: E/AndroidRuntime(273): ... 11 more 
01-15 12:08:31.089: I/Process(273): Sending signal. PID: 273 SIG: 9 
+2

錯誤是什麼樣的?也許'NullPointerEception'因爲'main'沒有被初始化? – Howard

+0

我在任何地方都看不到'main'的初始化。 –

+0

這不是android的Activity類字段的工作方式。如果要將一個Activity的值傳遞給下一個,請使用鍵值對的Bundle或Intent。看看[這篇文章](http://stackoverflow.com/q/6277662/593709) –

回答

0

您不能訪問其他活動的變量這種方式,更好的方法(例如)是使用恆定類..

public class Constants { 
    public static int water=0; 
    public staticint fire=0; 
} 

MainActivity:

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

    switch(v.getId()){ 
    case R.id.imageButton1: 
     Constants.water = 1; 
     Intent wi = new Intent("com.example.themetest.THEME"); 
     startActivity(wi); 
     break; 

    case R.id.imageButton2: 
     Constants.fire = 1; 
     Intent fi = new Intent("com.example.themetest.THEME"); 
     startActivity(fi); 
     break; 
    } 
} 

主題:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.theme); 

    if(Constants.water==1){ 


     res = getResources(); 
     drawable = res.getDrawable(R.drawable.water_theme); 
     linearLayout = (LinearLayout)findViewById(R.id.ll); 
     linearLayout.setBackgroundDrawable(drawable); 
     } 
     else if(Constants.fire==1){ 
      res = getResources(); 
      drawable = res.getDrawable(R.drawable.fire_theme); 
      linearLayout = (LinearLayout)findViewById(R.id.ll); 
      linearLayout.setBackgroundDrawable(drawable); 
    } 
     else{ 
      res = getResources(); 
      drawable = res.getDrawable(R.drawable.ic_launcher); 
      linearLayout = (LinearLayout)findViewById(R.id.ll); 
      linearLayout.setBackgroundDrawable(drawable); 
    } 

} 
+0

好的。謝謝。我會試試這個.... – maestrosan11

+0

哦。夥計,你真棒。它現在有效.. – maestrosan11

相關問題