使用Intent Extras重用Android活动

时间:2011-12-15 17:22:26

标签: android

我有一个Android应用程序,它在每个活动的底部使用付费赞助商图像按钮。触摸图像按钮会启动另一个显示赞助商内部(应用程序)配置文件的活动,或启动Web视图。使用Web View示例,我使用Intent的Extra参数将URL传递给Web View:

Intent i = null;        
i=new Intent (EventMain.this, SponsorWebView.class);
i.putExtra(URL_EXTRA, selectedSponsor.get("url"));
startActivity(i);

...并在网络视图中:

url=getIntent().getStringExtra(EventMain.URL_EXTRA);

显然,问题在于getIntent()函数需要在getStringExtra()参数列表中对调用活动EventMain进行硬编码。

虽然这适用于单个活动,但赞助商栏会出现在应用中的多个活动中。我无法相信解决方案是为每个调用Activity复制Web View,只替换getStringExtra()参数列表中调用Activity的名称。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我会查看View.getContext(),Context.getClassLoader()和ClassLoader.getClass(String name)

http://developer.android.com/reference/android/view/View.html#getContext()

http://developer.android.com/reference/android/content/Context.html#getClassLoader()

http://developer.android.com/reference/java/lang/ClassLoader.html#loadClass(java.lang.String

您可以使用Context获取类的名称,然后将该名称传递给ClassLoader以获取Class对象。

我应该添加一些警告,我从未真正做到这一点,因此可能会有一些意想不到的障碍,但从文档来看,它看起来像是一个很好的策略。

答案 1 :(得分:0)

解决方案如下:

在调用类中,在将要启动目标活动的每个类中创建一个静态字符串:

public final static String LINK_EXTRA="LINK";

调用活动中的所有其他代码保持不变:

Intent i = null;
i=new Intent (EventMain.this, MapView.class);
i.putExtra(LINK_EXTRA, selectedSponsor.get("url"));
startActivity(i);

在目标活动中,更改此内容:

link=getIntent().getStringExtra(EventMain.LINK_EXTRA);

到此:

Bundle extras = getIntent().getExtras();
link = extras.getString("LINK");

像魅力一样。