我有三個檔案:MainActivity.java、MapsActivity.java 和 MainActivity.xml。我想在 MainActivity.xml 中更改這個 TextView 物件:
<TextView
android:id="@ id/destination_latlng"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="80dp"
android:layout_marginBottom="40dp"
android:textColor="@color/black"
android:text="Destination Lat, Lng" />
我想從 MapsActivity.java 檔案中更改它,但是每當我嘗試通過將變數分配給“destination_latlng”TextView 并使用 setText() 來執行此操作時,應用程式就會崩潰。
public class Map extends AppCompatActivity implements OnMapReadyCallback {
// Destination coords
TextView destination_latLng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Retrieve the content view that renders the map.
setContentView(R.layout.activity_map);
// destination coords
destination_latLng = (TextView) findViewById(R.id.destination_latlng);
destination_latLng.setText("testing...");
如何從 MapsActivity.java 檔案中更改 TextView?
uj5u.com熱心網友回復:
嘗試將活動/片段視為應用程式資料的臨時視窗 - 您不應嘗試在其中存盤持久資料,并且您無法保證一旦不顯示它們將繼續存在多長時間。在您的情況下, MainActivity 可能已被作業系統破壞,當您回傳時,將繪制一個全新的布局。您不能從其他活動訪問 MainActivity 中的視圖,并且您不應該嘗試這樣做。
如果您有一些持久性資料,例如在 MainActivity 中顯示的有關您的目的地的一些文本,您應該將其存盤在資料庫、ViewModel、單例或 SharedPreferences 之類的東西中。這是使用 SharedPreferences 的方法
當您在地圖活動中設定新值時,您將更新 SharedPreferences 值。
public class Map extends AppCompatActivity implements OnMapReadyCallback {
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
// Anywhere in here you can edit the saved value in SharedPreferences
SharedPreferences.Editor ed = prefs.edit();
ed.putString("DEST", "Going Somewhere");
ed.apply();
}
}
然后,如果您想在主活動中顯示保存的值,您可以從 SharedPreferences 中加載它onResume
public class MainActivity extends AppCompatActivity {
// Destination coords
TextView destination_latLng;
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
// If R.id.destination_latlng is in R.layout.activity_main you can
// ONLY access it in MainActivity
destination_latLng = (TextView) findViewById(R.id.destination_latlng);
}
@Override
protected void onResume() {
super.onResume();
String dest = prefs.getString("DEST", "");
destination_latLng.setText(dest);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/489233.html
