[英]Save data in ArrayList in activity
我是新來的 android 程序員。 我有 4 個活動:AB C D。使用按鈕的順序是 A -> B -> C -> D -> A 和 A -> D。 我想將數據保存在活動 D 中的 ArrayList 中。問題是當我從 D 移動到 A 再回到 D 時,ArrayList 中的數據沒有保存。 D活動的代碼在這里:
public class SchedulerActivity extends AppCompatActivity {
public String name = "";
public String number = "";
public String date = "";
public String hour = "";
public ArrayList<EventClass> scheduler = new ArrayList<>();
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scheduler);
Bundle extras = getIntent().getExtras();
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SchedulerActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
}
});
if (extras != null) {
String sender = extras.getString("sender");
if(sender.compareTo("Hours") == 0) {
name = extras.getString("name");
number = extras.getString("number");
date = extras.getString("date");
hour = extras.getString("hour");
Date real_date = new Date();
SimpleDateFormat formatter1=new SimpleDateFormat("dd/MM/yyyy");
try {
real_date = formatter1.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
scheduler.add(new EventClass(real_date, name, number, "", hour));
for (EventClass event : scheduler){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
final TextView t = new TextView(this);
t.setText(event.toString());
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout.addView(t, params);
}
}
else{
for (EventClass event : scheduler){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
final Button btn = new Button(this);
final TextView t = new TextView(this);
t.setText(event.toString());
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
linearLayout.addView(btn, params);
}
}
}
}
我想在 C->D 發生時更改我的 ArrayList 並打印它,而當 D->A 發生時我只想打印它。 我知道我可以使用 SharedPreferences,但對於第一步,我想使用 ArrayList 執行此操作。執行此操作的最佳方法是什么?
創建 static 個對象不是一個好方法。 因此,您可以使用 android 活動堆棧代替使用 static Arraylist 。 Android 活動存儲在活動堆棧中。 回到以前的活動可能意味着兩件事。
您使用 startActivityForResult 從另一個活動打開了新活動。 在這種情況下,您只需從您的代碼中調用 finishActivity() function,它就會帶您回到上一個活動。 跟蹤活動堆棧。 每當您開始一個帶有意圖的新活動時,您都可以指定一個意圖標志,如 FLAG_ACTIVITY_REORDER_TO_FRONT 或 FLAG_ACTIVITY_PREVIOUS_IS_TOP。 您可以使用它在應用程序中的活動之間隨機播放。
調度程序是 SchedulerActivity 中的一個非靜態字段,這意味着它的存在與活動的實例相關聯。 當活動實例被銷毀時,這可能會發生,例如當屏幕方向被銷毀或您移動到另一個活動時,它的所有非靜態字段也是如此。 您可以通過在字段前添加 static 關鍵字來更改它:
public static ArrayList<EventClass> scheduler = new ArrayList<>();
現在,您的字段綁定到 class 本身,而不是實例,這意味着它不會與實例一起被銷毀。 但這也意味着它在所有實例之間共享,並且必須在 class 主體之外使用 class 名稱進行引用:
EventClass event = SchedulerActivity.scheduler.get(0)
一個好的方法是將數據保存在本地數據庫中,例如Room 。 您需要在 go 之前保存到新活動,然后在OnResume()上取回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.