2011-12-15 2 views
1

У меня есть приложение для Android, которое использует платную кнопку «Изображение» в нижней части каждого действия. При нажатии кнопки «Изображение» запускается другое действие, отображающее внутренний (спонсор) профиль спонсора или запуск веб-представления. Использование Web View пример, я передать URL в Web View с помощью дополнительного параметра Намерение в:Повторное использование Android-мероприятий с Intent Extras

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

... и в Web View:

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

Очевидно, что проблема заключается в факт, что функция getIntent() требует, чтобы вызывающая активность EventMain была жестко закодирована в списке параметров getStringExtra().

Хотя это работает просто отлично для одного действия, панель спонсора должна появляться в нескольких действиях в приложении. Я не могу поверить, что решение состоит в том, чтобы дублировать веб-представление для каждого вызывающего Activity, заменяя только имя вызывающей активности в списке параметров getStringExtra().

Любая помощь будет принята с благодарностью.

ответ

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

работает как шарм.

0

Я хотел бы проверить View.getContext(), Context.getClassLoader() и ClassLoader.getClass (имя строки)

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)

Контекст можно использовать для получения имени класса, а затем передать это имя ClassLoader для получения объекта Class.

Я должен добавить оговорку, что я никогда на самом деле не делал этого, так что может быть какая-то неожиданная ошибка, но из документов это выглядит как прекрасная стратегия.

+0

Благодарим за информацию. К сожалению, я не предполагаю ваше решение, используя эти методы. Не могли бы вы кратко рассказать, как вы видите, как эти методы работают над решением этой проблемы? Спасибо –

+0

Я бы поставил что-то вроде следующего перед «i = new Intent ...» Контекст c = getContext(); ApplicationInfo info = c.getApplicationInfo(); String classname = info.className; загрузчик ClassLoader = c.getClassLoader(); Класс thisClass = загрузчик.loadClass (имя_класс); и затем: i = новое намерение (thisClass, SponsorWebView.class); Единственный шаг, который я не уверен в том, будет ли c.getApplicationInfo(). ClassName будет правильным именем (так как я никогда не использовал его сам). Надеюсь, что поможет – mfrankli

+0

Спасибо, что посмотрели на это для меня. К сожалению, это не собирается делать трюк. Проблема заключается не в классе, который запускает веб-представление, а в самом классе Web View из-за необходимости ссылаться на вызывающий класс по имени в методе getIntent(). GetStringExtra (ClassName.EXTRA). Я хочу запустить веб-представление из нескольких классов, а параметризация ClassName.extra - это точка привязки. Еще раз большое спасибо за то, что посмотрели мой пост. –

Смежные вопросы