簡體   English   中英

ArrayList 在活動中保存數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM