在活动之间发送ArrayList <float>

时间:2017-11-15 18:07:23

标签: java android arraylist

我必须从存储在名为“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 [])以与以前相同的方式发送。

我不知道哪种方式最好,因为我不想让主线程饱和。

我想的其他方式是绘制主要活动,然后将绘图发送到下一个活动以显示它。但我不知道是否有可能。

这三个选项中哪一个会减少主线程?

3 个答案:

答案 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");