我有兩個活動-act1 和act2。我想在用戶按下按鈕時將字串從 act1 傳輸LatLng到 act2,經過一些計算后,我想將一個從 act2傳輸到 act1,同時保持兩個活動都打開(或者至少能夠從應用程式中恢復 act2 中的每個更改開始)。
我嘗試過的事情:
我在這里看到,如果我向意圖添加一些標志,則在使用
startActivity(). 從act1 到act2 運行良好,但是在從act2 啟動act1 后它停止act2,因此在下一個act2 打開時它會創建一個新的act2 副本。我查看了未棄用的 版本
startActivityForResult,但由于我需要打開這兩個活動,因此這不是我想要的。我也希望他們都接收和回傳資料。從這里開始,在一項活動中使用靜態資料結構可能不是一個好習慣。
我嘗試使用附加功能,
onNewIntent但無法使其正常作業(因為我無法同時運行這兩個活動)。
背景(如果相關):
我有一個包含兩個活動的應用程式 - main,它存盤一個ListView和一個地圖活動。
地圖必須在每個保存的地址中放置一個標記。
該串列有兩種按鈕型別:
- “添加一個新地點...”,打開地圖活動,并在用戶想要的地方添加一個新標記。
- -some address-,即在該地址對應的位置打開地圖。
我需要一種方法將所需地址傳遞給地圖,以便它顯示此位置,并且我還需要在創建位置后將新保存的地址傳遞回主活動。
uj5u.com熱心網友回復:
如果你想要一個更簡潔的方法,你關心架構設計:
- 為每個活動創建一個 ViewModel
- 創建一個供 ViewModel 訪問的單例,并使用它來共享資料。
單身人士可能是這樣的:
object AddressManager{
fun saveAddress(address: Address) {
}
fun getAddress(): Address{
}
}
當然,我建議你使用 Dagger 和 Hilt 進行注入,而不是使用“物件”,但這又是越來越多的設計思路。
uj5u.com熱心網友回復:
您可以使用存盤庫模式以應用程式中所有代碼均可訪問的方式存盤資料。
什么是存盤庫?
存盤庫是一個簡單的類,它保存一些資料并提供對它的訪問。就像是:
class Repository {
private String theString = "";
public void setTheString(String newValue) {
theString = newValue;
}
public String getTheString( {
return theString;
}
}
為存盤庫提供更具描述性的名稱是個好主意。因此,如果這是一個存盤位置資料的存盤庫,您可以將其命名為LocationRepository.
應該在哪里創建?
保持對它的參考的好地方是Application類。如果你沒有,你可以這樣定義:
class MyApplication extends Application {
private Repository repository = new Repository();
public Repository getRepository() {
return repository;
}
}
- 需要擴展
Applicationandroid框架提供的類 onCreate()如有必要,您還可以覆寫該方法以進行更復雜的初始化
在清單中定義應用程式類
為了讓 android 框架知道您的自定義Application類,您需要在以下檔案中定義它AndroidManifest.xml:
<application
android:name=".MyApplication"
...
在您的活動中訪問存盤庫
現在,在每個活動中,您都可以將應用程式背景關系轉換到您的應用程式類中:
class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Repository repository = ((MyApplication) getApplicationContext()).getRepository();
System.out.println(repository.getTheString());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/313507.html
