如何解决将数据保存到活动的ArrayList中
我是一名新的android程序员。 我有4个活动:A B CD。 使用按钮的顺序为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做到这一点。 最好的方法是什么?
解决方法
创建静态对象不是一个好方法。因此,您可以使用android活动堆栈代替静态 Arraylist 。 Android活动存储在活动堆栈中。回到上一个活动可能意味着两件事。
您使用startActivityForResult从另一个活动中打开了新活动。在这种情况下,您只需从代码中调用finishActivity()函数,它将带您回到上一个活动。 跟踪活动堆栈。每当您启动具有意图的新活动时,都可以指定一个意图标志,例如FLAG_ACTIVITY_REORDER_TO_FRONT或FLAG_ACTIVITY_PREVIOUS_IS_TOP。您可以使用它在应用程序中的活动之间进行切换。
,调度程序是SchedulerActivity中的一个非静态字段,这意味着其存在与活动实例相关联。当活动实例被销毁时,例如在屏幕方向被销毁或您移至另一个活动时,可能会发生这种情况,其所有非静态字段也是如此。您可以通过在字段之前添加静态关键字来更改此设置:
public static ArrayList<EventClass> scheduler = new ArrayList<>();
现在,您的字段与类本身(而不是实例)相关联,这意味着它不会与实例一起销毁。但这也意味着它在所有实例之间共享,并且必须在类主体之外使用类名进行引用:
EventClass event = SchedulerActivity.scheduler.get(0)
,
一个好的方法是将数据保存在本地数据库中,例如Room。您需要先保存,然后再进行新活动,然后重新保存到 OnResume()。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。