我的MainActivity调用另一个需要访问MainActivity的某些成员的Activity A. 将主要活动(或其上下文)的引用发送到活动A而不采用像parcelables等复杂方法的最佳方法是什么?
有一些重量级的Android摔跤比赛here,但我不确定它与我的问题有关。
详情
我有一对多关系的警报和警告对象(警告表示警报响起的各种时间)。
AlertsListActivity扩展了ListActivity,它显示了SQLite数据库表(主键:alertId)中的Alert对象列表。它有一个AlertsListAdapter。
AlertedsListActivity有一个ListFragment,它显示来自Alerted表的Alerted对象列表(外键是来自Alert表的alertId)。 它有一个AlertedsListAdapter。
AlertsListActivity需要调用AlertedsListActivity来显示Alerted对象的列表。我使用了startActivityForResult()。
Inside AlertedsListAdapter
public View getView(int position, View convertView, ViewGroup parent) {
final Alert alertItem = (Alert) mainActivity.alertsListAdapter.getItem(position);
final Alerted alertedItem = (Alerted) getItem(position);
...
我还需要Alert对象,以便从每个Alerted列表项中显示一些识别信息。因此,我需要引用mainActivity.alertsListAdapter
AlertedsListActivity如何访问AlertsListActivity?
更新:由于我没有得到任何解决方案,我实施了一种解决方法。我需要从Main Activity访问的数据,我修改了。因此,Alert对象变成了一个parcelable,并且SQLOpenHelper变成了单例。
这允许从活动A访问数据。
答案 0 :(得分:2)
以下是执行此操作的简单常用方法:
单身人士通常有如下例所示的变量,“useThisContext”或“mainFeedIsHere”。
public class Cloud
{
private static Cloud ourInstance = new Cloud();
private Cloud() { Utils.Log("cloud singleton launched"); }
public synchronized static Cloud getInstance()
{
return ourInstance;
}
/////////////////////////////////////////////////
public Context useThisContext;
另一个例子......
public class Feed
{
private static Feed ourInstance = new Feed();
private Feed()
{
Utils.Log("feed singleton launched");
freshestPostsForDisplay = new ArrayList<ParseObject>();
}
public synchronized static Feed getInstance()
{
return ourInstance;
}
public List<ParseObject> freshestPosts;
public MainActivity mainFeedIsHere;
非常简单地当一切都启动时(或当它发生变化时),那些“事物”需要在单身中设置这些变量。换句话说,那些东西“告诉单身人士,他们在哪里”。就这么简单。
所以,在MainActivity中,也许在onCreate中,它可能会说像......
CLOUD.useThisContext = this;
FEED.mainFeedIsHere = this;
然后例如在Feed.java中你可能会说
mainFeedIsHere.feedReload();
不言而喻,你必须检查它们是否为空(但它还有什么不可以?)并且你必须保持它们是最新的。 (无论出于何种原因,你可能想要改变“useThisContext” - 再怎么可能呢?)
{有时候你会有一个“集中式”单身人士......或许是“国家”......将所有这些结合在一起 - 这样任何人都可以根据需要“接触”任何“暴露”的东西。这真的是游戏引擎的发展方向;这样你就可以随时随地说出更多或更少的SoundEffects.Booms()或Tanks.Faster()或AI.FindVillains()。}
干杯!
答案 1 :(得分:0)
由于我没有得到任何解决方案,我实施了一种解决方法。我需要从Main Activity访问的数据,我修改了。因此,Alert对象变成了一个parcelable,并且SQLOpenHelper变成了单例。
这允许从活动A访问数据。