如何将类对象传递给activity

时间:2015-05-09 21:22:43

标签: android android-intent android-fragments android-activity

我有一个BarcodeReaderActivity,我将在几个活动中开始,在开始这个Activity之前,我想为此{{}传递一个目标Activity类1}}所以在阅读QR码后,我希望它用BarcodeReaderActivity打开目的地Activity

我的第一个解决方案是将目标类名称作为字符串传递,并在Intent中使用switch case并为该类编写特定的BarcodeReaderActivity

我还尝试先将Intent创建为BarcodeReader,然后当我启动目标Fragment然后移除Activity时,它会显示上一个Fragment在很短的时间内但我不希望这种情况发生。

如果您了解更好的方法,我想向您提供一些建议。

2 个答案:

答案 0 :(得分:1)

您可以在Android活动之间传递对象。最好的方法是从Android SDK实现Parcelable界面。之后,您可以将对象添加到负责使用putExtra("parcelName", object)方法启动新活动的Intent。要在antoher活动中读取Parcelable对象,您可以使用此类代码段:

getIntent().getExtras().getParcelable("parcelName")

我在这里找到了很好的例子:http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

此外,如果你想避免大量的样板代码,你可以使用auto-parcel库,它可以为你生成一些可重复的东西。

答案 1 :(得分:1)

您可以在Intent之外构建必需的BarcodeReaderActivity并将其作为额外传递。如果需要,您可以稍后在BarcodeReaderActivity中更改此意图。 像这样:

Intent finalIntent = new Intent( context, FinalActivity.class );
Intent barcodeIntent = new Intent( context, BarcodeReaderActivity.class );
barcodeIntent.putExtra( "finalintentkey", finalIntent);
context.startActivity(barcodeIntent);

然后在你的BarcodeReaderActivity检索意图中(并根据需要进行修改):

Intent finalIntent = getIntent().getParcelableExtra( "finalintentkey" );
// if needed modify intent here
finalIntent.addExtra( "somekey", someneededvalue );
startActivity( finalIntent );

// BarcodeReaderActivity can be finished now
finish();