从另一个活动获取对象的引用

时间:2016-03-07 14:02:09

标签: android

修改

这是我在initialize方法中加载activity布局后用于onCreate()个变量的方法

private void initializeVariables() {
    randomButton = (Button) findViewById(R.id.randomButton);
    gameButton = (Button) findViewById(R.id.gameButton);
    i = 1;
    listIndex = 0;
    nameList = PlayersNames.nameList;
    villagerBundle = new ArrayList<>();
    characters = new ArrayList<Card>();
    players = new ArrayList<Player>();


    villagerOne = new Villager();
    villagerTwo = new Villager();
    villagerThree = new Villager();
    villagerFour = new Villager();
    villagerFive = new Villager();

    villagerBundle.add(villagerOne);
    villagerBundle.add(villagerTwo);
    villagerBundle.add(villagerThree);
    villagerBundle.add(villagerFour);
    villagerBundle.add(villagerFive);
}

原始问题:

我在Android中有 2项活动

一个中我创建:

public static Villager villagerOne;

villagerOne = new Villager();

然后在另一个中,我应该访问villagerOne的{​​{1}}变量:

mAlive

作为参考,这些是villagerOne.getMAlive(); 类:

Card

这是public class Card { //Names public String mCharacter; //Status private boolean mAlive; private boolean mDefended; private boolean mOwled; private boolean mLastSavaged; private boolean mLastLynched; //Constructor public Card(){ } public void setMCharacter(String value){ this.mCharacter = value; } public void setMAlive(boolean alive){ this.mAlive = alive; } public String getMCharacter(){ return mCharacter; } public boolean getMAlive(){ return mAlive; } } 类,Villager

extends Card

3 个答案:

答案 0 :(得分:0)

由于您在活动一个中宣布您的村民为静态,您应该可以从任何地方访问

one.villagerOne.getMAlive()

(这里我假设活动类别1的名称是一个)

由于这个解决方案似乎存在争议,我会告诉你为什么我认为它是一个好的解决方案:

如果您通过意图传递村民的副本并且您的村民被杀死了#34;原来的村民将被销毁,为什么副本仍然存在。这意味着你必须通过副本与每个活动进行沟通,并告诉他们要解散他们的村民副本。听众等等。

如果您按照我的建议使用对静态成员的引用,那么您需要做的就是在调用任何方法之前测试null的引用:

if( one.villagerOne != null ) alive = one.villageOne.getMAlive();

答案 1 :(得分:0)

如果您需要该变量的副本,则应通过extras传递它。如果您需要访问该实际变量 - 您可能应该重新构建。多个活动所需的数据不应归任何活动所有,它应由两个活动可以达到的另一个数据结构所拥有。例如,单个Player对象可以查询其卡片列表。

答案 2 :(得分:0)

我认为如果你让Villager类实现Serializable,你可以发送它的意图如下:

Intent i = new Intent(FirstActivity.this, SecondActivity.class);
Villager villagerOne;
villagerOne = new Villager();
i.putExtra("Villager", strName);
startActivity(i);

在第二项活动中,你会得到结果:

Villager villager = (Villager) getIntent.getSerializableExtra("Villager");