2017-08-05 124 views
3

我试图从一项活动向另一项活动传递信息(更具体地说是一个信息类)。在我的应用程序中,我有一个负责加载和初始化变量的启动画面。我们的目标是将这些信息提供给实际的游戏本身,以便使用它,但我不知道如何去做。在我的闪屏类我有这样的方法,它负责从闪屏移动到游戏,一旦一切都装:Android:将信息从一项活动传递到另一项

private void moveToGame() { 
    loop.setRunning(false); 
    act.startActivity(new Intent(splash, MainActivity.class)); 
    act.finish(); 
    return; 
} 

然后主活动类有这行代码,以获得实际的游戏:

setContentView(new Environment(this, this)); 

Environment类的构造函数是Environment(Context context, Activity act)

的目标是到constuctor更改为Environment(Context context, ActivityAct, LoadInfo li),但我怎么一路传递信息给Environment构造函数?

编辑1 - LoadInfo类

public class LoadInfo { 
    private HashMap<String, Typeface> fonts; 
    private HashMap<String, Image> images; 
    private File logFile; 
    private File settingsFile; 
    private File gameDir; 

    public LoadInfo() {} 

    public LoadInfo(HashMap<String, Typeface> fonts, HashMap<String, Image> images, File logFile, File settingsFile, File gameDir) { 
     this.fonts = fonts; 
     this.images = images; 
     this.logFile = logFile; 
     this.settingsFile = settingsFile; 
     this.gameDir = gameDir; 
    } 

    public HashMap<String, Typeface> getFonts() { 
     return fonts; 
    } 

    public HashMap<String, Image> getImages() { 
     return images; 
    } 

    public File getLogFile() { 
     return logFile; 
    } 

    public File getSettingsFile() { 
     return settingsFile; 
    } 

    public File getGameDir() { 
     return gameDir; 
    } 

    public void setFonts(HashMap<String, Typeface> fonts) { 
     this.fonts = fonts; 
    } 

    public void setImages(HashMap<String, Image> images) { 
     this.images = images; 
    } 

    public void setLogFile(File logFile) { 
     this.logFile = logFile; 
    } 

    public void setGameDir(File gameDir) { 
     this.gameDir = gameDir; 
    } 

    public void setSettingsFile(File settingsFile) { 
     this.settingsFile = settingsFile; 
    } 

    public boolean fullyLoaded() { 
     return fonts != null && images != null && logFile != null && gameDir != null && settingsFile != null; 
    } 

    public String toString() { 
     if(logFile == null) 
      return "well no file to load"; 
     return logFile.toString(); 
    } 
} 
+0

什么是** LoadInfo ** ..? –

+0

@MuthukrishnanRajendran包含我想传递给'Environment'的所有信息的类。例如,我会在'LoadInfo'中有一个看起来像'public int getValue()'的方法,然后它将返回在启动画面期间初始化的值。 – Ryan

+0

您可以添加有问题的LoadInfo类。 –

回答

3

你可以让你LoadInfo为Serializable像下面,

public class LoadInfo implements Serializable { 
    // your code, 
} 

,并在你飞溅的活动,您可以发送这样的,

//LoadInfo loadInfo = new LoadInfo(); this may be your loadInfo object 

Intent intent = new Intent(act, MainActivity.class); 
intent.putExtra("load_info", loadInfo); // Add your LoadInfo object here 
act.startActivity(intent); 

在您的MainActvity中,您可以像这样得到

LoadInfo loadInfo = (LoadInfo) getIntent().getSerializableExtra("load_info"); 
setContentView(new Environment(this, this, loadInfo)); 
+0

这似乎工作,但我得到一个错误,我不知道它是否是这个结果。当我尝试调用'loadInfo.toString()'时,我得到'NullPointerException',包括初始'LoadInfo'类创建的闪屏类。实际上,我为每个“get”方法都得到'NullPointerException's,即使我检查了确保对象(在本例中为'File')不为null。这是这个或其他现在明显的问题的结果吗? – Ryan

+0

在你的问题中添加你的代码,我会检查并让你知道 –

+0

完成,如果你需要更多的上下文让我知道。感谢您的全力帮助 – Ryan

-2

在游览发送者的意图的活动,你应该做这样的小例子: String username="Christian"; int code=123456; Intent i=new Intent(this,ReceiverActivity.class); i.putextra("user",username); i.putextra("code",code);

而在ReceiverActivity您收到的信息是这样的: Intent i=getIntent(); String usr=i.getStringExtra("user"); int code=i.getIntExtra("code");

0

警告:Intent额外的有极限1Mb

要将信息从一个Activity传递到另一个,通常使用Intent多余,但它具有1MB数据的限制。在你的问题中,你正在使用LoadInfo类,我相信它可以轻松传递1MB的大小,因为它会加载游戏信息。

建议:您可以选择执行ApplicationService(即Bound Service)到这个实例存储LoadInfo和所有的活动都可以访问这个实例。

更多提示:你也可以使用一个Singleton类存储的LoaderInfo这种情况下,但你应该关闭你的游戏中的所有活动后,将其删除。

观测数据:闪屏为Activity,你一定要记住,从Back Stack删除它,否则,当用户点击回来,这将返回飞溅Activity

+0

我会研究这些建议,因为我同意'LoadInfo'类也可以轻松传递1MB。至于Splash Screen作为'Activity',我还没有在模拟器或物理设备上遇到过这个问题。 – Ryan

+0

你说得对,因为你正在使用'act.finish();',这会破坏这个'Activity',所以在'Back Stack'中删除它。 –

相关问题