我的MainActivity调用另一个需要访问MainActivity某些成员的ActivityA。
将对主活动(或其上下文)的引用发送给活动A的最佳方法是什么,而不求助于诸如包裹等的复杂方法?

有一些重量级的android摔跤比赛here,但我不确定这与我的问题有关。

细节

我有一对多关系的Alert和Alerted对象(Alerted代表Alert响动的不同时间)。

AlertsListActivity扩展了ListActivity,它显示了SQLite数据库表中的Alert对象的列表(主键:alertId)。它具有一个AlertsListAdapter。

AlertedsListActivity有一个ListFragment,它显示Alerted表中的Alerted对象的列表(外键是Alert表中的alertId)。
它具有AlertedsListAdapter。

AlertsListActivity需要调用AlertedsListActivity来显示被警报对象的列表。我使用了startActivityForResult()。

内部AlertssListAdapter

    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

AlertssListActivity如何访问AlertsListActivity?

更新:由于我没有任何解决方案,因此我实施了一种解决方法。我修改了需要从主要活动访问的数据。因此,将Alert对象设置为可拆分的,将SQLOpenHelper设置为单例。

这允许从活动A访问数据。

最佳答案

这是简单,常用的方法:

单例通常具有如下示例所示的变量“ 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();


毋庸置疑,您必须检查它们是否不为null(但是还有其他可能吗?),并且必须保持它们为最新。 (即,无论出于何种原因,您可能想更改“ useThisContext”-再次可能是什么?)

{有时候,您将有一个“集中式”单身人士。也许是“州”……将所有这些都组合在一起-这样任何人都可以根据需要“进入”任何这些“公开的”事物。实际上,这就是游戏引擎的运行方式。这样您就可以随时随地说更多或更少的SoundEffects.Booms()或Tanks.Faster()或AI.FindVillains()。}

干杯!

07-26 01:17