Main Activity如何调用另一个Activity A并将其上下文发送给它?

时间:2014-03-30 01:06:35

标签: android

我的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访问数据。

2 个答案:

答案 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访问数据。