我是一个新的安卓程序员。我有4个活动:a b 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。最好的办法是什么?
3条答案
按热度按时间kyxcudwk1#
一个好的方法是将数据保存在本地数据库中,比如room。您需要先保存,然后再转到新活动,并在onresume()上重新获取它。
sqougxex2#
创建静态对象不是一个好方法。因此,您可以使用android活动堆栈来代替静态arraylist。android活动存储在活动堆栈中。回到以前的活动可能意味着两件事。
您使用startactivityforresult从另一个活动打开了新活动。在这种情况下,您只需从代码中调用finishactivity()函数,它就会将您带回上一个活动。跟踪活动堆栈。每当您开始一个有意图的新活动时,您都可以指定一个意图标志,如标志\u activity \u reorder \u to \u front或标志\u activity \u previous \u is \u top。您可以使用它在应用程序中的活动之间切换。
wlwcrazw3#
scheduler是scheduleractivity中的一个非静态字段,这意味着它的存在与活动的示例相关联。当活动示例被销毁时,例如当屏幕方向被销毁或您移动到另一个活动时,它的所有非静态字段也会被销毁。您可以通过在字段前添加静态关键字来更改:
现在,字段绑定到类本身,而不是示例,这意味着它不会随示例一起被销毁。但这也意味着它在所有示例之间共享,并且必须用类主体之外的类名引用: