2016-08-03 51 views
0

我有3個活動。 A,B,C 我從活動A. 活動B,從意圖設置字符串由getExtra我需要另一個額外的活性C,然後回到活動B.從3個活動之間的意圖保存額外

但之後,我回到活動B,我失去了額外的活動A. 我試圖使用savedPreferenced,將啓動更改爲singleTop。 但我的應用程序崩潰。 如何從意圖保存額外的東西?

我找不到完整的教程來做到這一點。

我是新手,需要一些詳細的解釋。謝謝。

這是我用於從活性的發送額外到B的代碼:

void sendTxt() { 
    String shareBody = getPlainDocumentText(); 
    if (shareBody == null) { 
     Toast.makeText(A.this, R.string.empty_document, Toast.LENGTH_LONG).show(); 
     return; 
    } 
    Intent i = new Intent(A.this, B.class); 
    String txt = shareBody; 
    i.putExtra("file", txt); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(i); 
    finish(); 
    Screen.unlockOrientation(A.this); 
} 

這是代碼我曾經getExtra在乙從A:

public String teks; 
if (savedInstanceState == null){ 
     Bundle extras = getIntent().getExtras(); 
     if(extras==null){ 
      teks = null; 
     }else{ 
      teks = extras.getString("file"); 
     } 
    }else{ 
     teks = (String) savedInstanceState.getSerializable("file"); 
    } 
    t = (TextView)findViewById(R.id.txt); 
    t.setText(teks); 

然後我從活動移動B到C:

Intent i = new Intent(B.this, C.class); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
finish(); 

在活動C,我回到B和增派到B:

Intent i = new Intent(C.this, B.class); 
String path = dir.getAbsolutePath().toString(); 
i.putExtra("dir", path); 
setResult(RESULT_OK, i); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
finish(); 

在B I收到額外的C,但失去了從A

多餘的,我不能顯示日誌,因爲我沒有使用模擬器。我只是通過創建APK測試我的應用程序,因爲我的筆記本電腦不支持虛擬仿真

+1

請與我們分享您的密碼。 –

+0

plz粘貼你的getextra代碼和錯誤日誌。 –

+0

更新..這些是我的代碼 – ranysella

回答

0

你從一個失去了額外的價值B中你調用C B活性後,因爲在完成(破壞)B活性所以價值不丟失,通過從C活動調用重新創建B活動。

對於這個問題,你可以將你的值保存在Shared Pref中。

將它保存在偏愛活動A

SharedPreferences.Editor editor = getSharedPreferences("your_pref_name", MODE_PRIVATE).edit(); 
editor.putString("key_name", extra_value); 
editor.commit(); 

得到它在活動B

SharedPreferences prefs = getSharedPreferences("your_pref_name", MODE_PRIVATE); 
String name = prefs.getString("key_name", ""); 

希望這會幫助你。