2012-03-09 11 views
3

我想在公共類上使用靜態變量來在活動之間傳遞它們。如何在使用公共類上的靜態變量的活動之間傳遞數據?

我遇到了一個難得的問題。我給一個活動的靜態變量賦值。此活動調用GLSurfaceView並監聽屏幕方向更改。

如果我給GLSurfaceView上的靜態變量的值,那麼,所有工作正常,值存儲,我可以檢索他們,當屏幕方向更改後再次調用onCreate方法。

問題是當我在GLSurfaceView類之外的活動的onTouchListener方法內部存儲靜態變量的值時。這些值沒有正確存儲在靜態變量上,因爲當我嘗試在GLSurfaceView上訪問它們時,這些值不是它們應該是的。

這是我的靜態變量類:

public class MagazineStatus { 
//clase utilizada para almacenar variables estáticas. 
static int currentPage=1; //página actual 
//Valores originales cuando pasamos de un modo a otro, por ejemplo, de portrait a landscape. 
static float oScale=0.0f; 
static float oX=0.0f; 
static float oY=0.0f; 
static float oZrot=0; 
static boolean modeChanged=false; //indica si hemos cambiado de modo 
(landscape/portrait)  
} 

這裏我存儲在我的活動類(我做了調試和aparently它們被正確地存儲)的值:

 for (int i=0;i<thumbnailLinearLayouts.size();i++){ 
     final int auxIndex=i; 
     thumbnailLinearLayouts.get(i).setOnTouchListener(new OnTouchListener(){ 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       MagazineStatus.currentPage=auxIndex; 
       System.out.println("MagazineStatus.currentPage: "+MagazineStatus.currentPage); 
       return true; 
      }        
     }); 
    } 

在這裏我試圖在GLSurfaceView類中檢索這些值,並且這些值不正確,它將檢索原始初始值1,而不是之前存儲的值。

currentPage=MagazineStatus.currentPage;  //cargo datos guardados antes del cambio de orientación 

我在做什麼錯了?

+1

呵呵,你聲明一個變量final而不是重新賦值給它('auxIndex')。那裏發生了什麼? – 2012-03-09 16:49:22

+0

工作,有沒有問題 – NullPointerException 2012-03-09 16:56:51

+0

@elevine - 我錯了關於'最後'部分,每個這個問題+答案.n好的kow:http://stackoverflow.com/questions/609609/creating-final-變量 - 循環內 – 2012-03-09 19:58:47

回答

7

如果Android殺死並重新啓動應用程序的進程,那麼靜態變量將被分配爲其默認值。你可能會使用SharedPreferences而不是靜態變量的更好:http://developer.android.com/guide/topics/data/data-storage.html#pref

+0

是的,sharedPreferences是另一種方式來做到這一點,但我想學習使用靜態變量來實現這一點。我確信有一種方法可以實現這一點。 – NullPointerException 2012-03-09 16:57:24

+0

鑑於Android管理應用程序生命週期的方式,它可能不是使用靜態變量在活動之間共享數據的最佳選擇。 – elevine 2012-03-09 17:22:57

+0

那麼有一個更好的選擇來保存實例變量,即通過'onSaveInstanceState'並通過'onRestoreInstanceState | onCreate'。 'SharedPreferences'的目的是存儲應用程序在數週後可能需要的數據! – 2016-08-31 10:51:00

2

定義變量作爲公共靜態,然後用它貫穿整個應用程序,

public static String xyz = "abcd"; 

現在在任何類中使用「XYZ 「只是用它作爲下

classname.xyz; 
+0

我試着把公開,但沒有變化,問題仍然在這裏 – NullPointerException 2012-03-09 17:01:47

+0

我使用這種方法時出錯 – Ray 2012-08-25 18:38:24

+0

工作正常,謝謝你的時間! – Nick 2014-05-09 06:13:09

0

次活動: -

在XML文件中取一個TextView的場

的Java代碼

public static String name; 

TextView t=(TextView)findViewById(R.id.tv); 

t.setText(name); 

第一個活動: -

在XML文件中取一個的EditText和一個按鈕

Java代碼

button.setOnClickListener(new View.onClickListener){ 

    @override 
    public void onClick(View v){ 

    SecondActivity.name=editText.getText().toString(); 

    Intent i=new Intent(firstActivity.this,SecondActivity.class); 

    startActivity(i); 

    } 
} 
相關問題