我有一个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的名称。
非常感谢任何帮助。
答案 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");
像魅力一样。