2014-02-17 41 views
1

我是Android開發新手。當我按下主要活動上的一個按鈕時,我試圖調用其中一個類的方法。Android - 在onCreate之前更改類變量

在我的主要活動我有這個按鈕:

public void buttonTest(){ 
    Button b = (Button) findViewById(R.id.test);     
    b.setOnClickListener(new View.OnClickListener() {  
     @Override 
     public void onClick(View arg0) {      
      String s = "changeText:myText"; 
      Intent in = new Intent(PlusActivity.this, Test.class); 
      in.putExtra("method",s); 
      startActivity(in);    
     } 
    }); 
} 

這裏是是這一意圖以上調用的類(不含進口)。

public class Test extends Activity { 

    static String text = "test"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     TextView mTextView = (TextView) findViewById(R.id.textView); 
     mTextView.setText(text); 
    } 

    public void changeText(String s){ 
     this.text = s;  
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     String[] array = intent.getStringExtra("method").split(":"); 
     if(array[0].equals("changeText")){ 
      changeText(array[1]); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.test, menu); 
     return true; 
    } 
} 

基本上我想知道是否有可能改變String text的價值,onCreate()之前。基本上每個按鈕都會有一個對應的文本,我希望能夠根據哪個按鈕修改該文本。

如果是這樣,我該怎麼做/改變?

在此先感謝。

+3

使用'字符串值= getIntent()getStringExtra( 「方法」);'和'mTextView.setText(值); ' – Raghunandan

+1

謝謝,那就是我想要的。我非常沉迷於改變我所擁有的變量的價值,所以我沒有想到如果沒有它,我可以做到。 –

回答

5

正確的做法是將您希望它的字符串作爲額外的意圖發送,並從意圖中讀取額外內容並將其分配給onCreate函數中的該變量。

+1

我作爲一個額外的路過。我正在閱讀額外的意圖創作。我應該在我的'onCreate'上改變以獲得意圖已經有什麼? –

+0

你的意思是,什麼@Raghunandan只是[評論](http://stackoverflow.com/questions/21822168/android-change-class-variable-before-oncreate#comment33026546_21822168)? –

+0

在您的onCreate使用raghunandan發佈的代碼 – Neji

1

使用SharedPreference。保存在第一類的OnCLick中,並在第二課的OnCreate中檢索。

初始化

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode 
Editor editor = pref.edit(); 

存儲數據

editor.putBoolean("key_name", true); // Storing boolean - true/false 
editor.putString("key_name", "string value"); // Storing string 
editor.putInt("key_name", "int value"); // Storing integer 
editor.putFloat("key_name", "float value"); // Storing float 
editor.putLong("key_name", "long value"); // Storing long 

editor.commit(); // commit changes 

檢索數據

// returns stored preference value 
// If value is not present return second param value - In this case null 
pref.getString("key_name", null); // getting String 
pref.getInt("key_name", null); // getting Integer 
pref.getFloat("key_name", null); // getting Float 
pref.getLong("key_name", null); // getting Long 
pref.getBoolean("key_name", null); // getting boolean 

刪除數據

editor.remove("name"); // will delete key name 
editor.remove("email"); // will delete key email 
editor.commit(); // commit changes 

清除存儲

editor.clear(); 
editor.commit(); // commit changes 
+0

謝謝你在這裏回答,但這比我想要的複雜得多。我已經達到了我想要的。 –

1
String text; 
if (savedInstanceState == null) { 
    extras = getIntent().getExtras(); 
    if(extras == null) { 
     text= null; 
    } else { 
     text= extras.getString("your default string message"); 
    } 
} else { 
    String s = "your default string message"; 
    text= (String) savedInstanceState.getSerializable(s); 
} 
+0

非常感謝您的回答,但我解決了。 –