Android:将信息从一项活动传递到另一项
我试图从一项活动向另一项活动传递信息(更具体地说是一个信息类)。在我的应用程序中,我有一个负责加载和初始化变量的启动画面。我们的目标是将这些信息提供给实际的游戏本身,以便使用它,但我不知道如何去做。在我的闪屏类我有这样的方法,它负责从闪屏移动到游戏,一旦一切都装: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();
}
}
你可以让你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));
在游览发送者的意图的活动,你应该做这样的小例子: 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");
警告:Intent
额外的有极限1Mb:
要将信息从一个
Activity
传递到另一个,通常使用Intent
多余,但它具有1MB数据的限制。在你的问题中,你正在使用LoadInfo
类,我相信它可以轻松传递1MB的大小,因为它会加载游戏信息。
建议:您可以选择执行Application
或Service
(即Bound Service
)到这个实例存储LoadInfo
和所有的活动都可以访问这个实例。
更多提示:你也可以使用一个Singleton
类存储的LoaderInfo
这种情况下,但你应该关闭你的游戏中的所有活动后,将其删除。
观测数据:闪屏为Activity
,你一定要记住,从Back Stack
删除它,否则,当用户点击回来,这将返回飞溅Activity
。
我会研究这些建议,因为我同意'LoadInfo'类也可以轻松传递1MB。至于Splash Screen作为'Activity',我还没有在模拟器或物理设备上遇到过这个问题。 – Ryan
你说得对,因为你正在使用'act.finish();',这会破坏这个'Activity',所以在'Back Stack'中删除它。 –
什么是** LoadInfo ** ..? –
@MuthukrishnanRajendran包含我想传递给'Environment'的所有信息的类。例如,我会在'LoadInfo'中有一个看起来像'public int getValue()'的方法,然后它将返回在启动画面期间初始化的值。 – Ryan
您可以添加有问题的LoadInfo类。 –