我必须从存储在名为“subZ”的ArrayList中的值中绘制一个图形(它有252个元素)。在我的主要活动中,我存储了值,然后在我必须绘制的下一个活动中。
所以我这样发送:
Intent change_screen = new Intent(MeasureScreenActivity.this, ResultScreenActivity.class);
//Send variables to another activity
change_screen.putExtra("standard_measurement",standard_measurement);
change_screen.putExtra("current_measurement",current_measurement);
change_screen.putExtra("subZ", subZ);
startActivity(change_screen);
//Effect of transition
overridePendingTransition(R.anim.fade_in,R.anim.fade_out);
finish();
在其他活动中,我接受了这样的话:
//Store the data passed from MeasureScreenActivity
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
//Make sure that bundle is not null
if(bundle != null) {
standard_measurement = (String) bundle.get("standard_measurement");
current_measurement = (int) bundle.get("current_measurement");
subZ = (ArrayList<Float>) bundle.get("subZ");
}
我的问题是:这样做得好吗?因为metod putExtra(String,ArrayList)确实不存在。
我知道将ArrayList转换为数组的其他方式:
Float aux[] = subZ.toArray();
使用方法putExtra(String,Float [])以与以前相同的方式发送。
我不知道哪种方式最好,因为我不想让主线程饱和。
我想的其他方式是绘制主要活动,然后将绘图发送到下一个活动以显示它。但我不知道是否有可能。
这三个选项中哪一个会减少主线程?
答案 0 :(得分:0)
塞尔吉奥,答案是putParcelableArrayListExtra()
但是,构建组件的Android部分还有一些新功能。使用LiveData https://developer.android.com/topic/libraries/architecture/livedata.html将数组保存在ViewModel中,可以通过您的活动共享。
答案 1 :(得分:0)
您可以发送ArrayList
change_screen.putStringArrayListExtra("subZ", subZ);
代替
change_screen.putExtra("subZ", subZ);
答案 2 :(得分:0)
您尝试使用Serializable吗?
ArrayList<Float> list = new ArrayList<>();
Intent i = new Intent(MeasureScreenActivity.this, ResultScreenActivity.class);
i.putExtra("arg_key", list);
获取额外
ArrayList<Float> list = ( ArrayList<Float>) getIntent().getSerializableExtra("arg_key");