我正在尝试将信息(更具体地说是一个包含信息的类)从一个活动传递到另一个活动。在我的应用程序中,我有一个启动画面,负责加载和初始化变量。目标是将这些信息提供给实际游戏本身,以便可以使用,但我不知道该怎么做。在我的启动画面类中,我有这个方法,负责在加载所有内容后从启动画面移动到游戏:
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)
目标是将构造更改为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 :(得分:3)
您可以将LoadInfo设置为Serializable,如下所示
//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);
在您的Splash Activity中,您可以这样发送,
LoadInfo loadInfo = (LoadInfo) getIntent().getSerializableExtra("load_info");
setContentView(new Environment(this, this, loadInfo));
在您的MainActvity中,您可以这样做,
> ffmpeg -y -i
> C:\workspace\processor\.\temp_dir\8fdcc1c9-6275-4ef5-b9e7-05bd5cfe51ab_3840.mp4
> -i C:\workspace\processor\.\temp_dir\76db60cf-a653-424e-8cca-e6dcbe8645da_3840.mp4
> -i C:\workspace\processor\.\temp_dir\93f4ea5f-c06f-4d57-b5c8-3606f0ff39b6_3840.mp4
> -i C:\workspace\processor\.\temp_dir\7d71963a-d161-4be9-ade6-f1cee5a6f48e_3840.mp4
> -i C:\workspace\processor\.\temp_dir\3ec05fa6-1c9a-4c1b-b254-1db4800d4643_3840.mp4
> -i C:\workspace\processor\.\temp_dir\9b0eb5b8-23fb-4105-8a34-ddb48856f98d_3840.mp4
> -i C:\workspace\processor\.\temp_dir\1729a80e-1925-46b5-8ec2-e476be5b2f13_3840.mp4
> -i C:\workspace\processor\.\temp_dir\0c7a4f48-9381-4133-8935-5181ae06b419_3840.mp4
> -i C:\workspace\processor\.\temp_dir\a49990cf-7ccd-480c-86c3-1a13b661ad0d_3840.mp4
> -i C:\workspace\processor\.\temp_dir\5d3d02c9-2d09-4534-91f1-4c54781179fa_3840.mp4
> -i C:\workspace\processor\.\temp_dir\096f9b3b-67bc-4f0a-bdea-b637fb45ad1f_3840.mp4
> -filter_complex color=black:3840x1920:d=147.31495999999999[base];
[0:v]fade=in:st=0:d=0.5,fade=out:st=6.9:d=0.5,setpts=PTS-STARTPTS[v0];
[1:v]fade=in:st=0:d=0.5,fade=out:st=13.291992:d=0.5,setpts=PTS-STARTPTS+(5.399999999999999/TB)[v1];
[2:v]fade=in:st=0:d=0.5,fade=out:st=11.375:d=0.5,setpts=PTS-STARTPTS+(18.691992/TB)[v2];
[3:v]fade=in:st=0:d=0.5,fade=out:st=12.958984:d=0.5,setpts=PTS-STARTPTS+(30.066992/TB)[v3];
[4:v]fade=in:st=0:d=0.5,fade=out:st=17.666992:d=0.5,setpts=PTS-STARTPTS+(43.025976/TB)[v4];
[5:v]fade=in:st=0:d=0.5,fade=out:st=14.541992:d=0.5,setpts=PTS-STARTPTS+(60.692968/TB)[v5];
[6:v]fade=in:st=0:d=0.5,fade=out:st=13.94:d=0.5,setpts=PTS-STARTPTS+(75.23496/TB)[v6];
[7:v]fade=in:st=0:d=0.5,fade=out:st=12.66:d=0.5,setpts=PTS-STARTPTS+(89.17496/TB)[v7];
[8:v]fade=in:st=0:d=0.5,fade=out:st=17.74:d=0.5,setpts=PTS-STARTPTS+(101.83496/TB)[v8];
[9:v]fade=in:st=0:d=0.5,fade=out:st=11.86:d=0.5,setpts=PTS-STARTPTS+(119.57495999999999/TB)[v9];
[10:v]fade=in:st=0:d=0.5,fade=out:st=15.38:d=0.5,setpts=PTS-STARTPTS+(131.43496/TB)[v10];
[base][v0]overlay[over1];
[over1][v1]overlay[over2];
[over2][v2]overlay[over3];
[over3][v3]overlay[over4];
[over4][v4]overlay[over5];
[over5][v5]overlay[over6];
[over6][v6]overlay[over7];
[over7][v7]overlay[over8];
[over8][v8]overlay[over9];
[over9][v9]overlay[over10];
[over10][v10]overlay[over11]
> -map [over11] C:\workspace\processor\.\temp_dir\2c10347e-b16c-4c18-ab8a-db14b9e3bc32.mp4
答案 1 :(得分:0)
警告: Intent
extra的限制为 1Mb :
要将信息从一个
Activity
传递到另一个,使用Intent
extra是正常的,但它有1MB数据的限制。在您的问题中,您正在使用LoadInfo
类,我相信它可以轻松传递1MB大小,因为它会加载游戏信息。
建议:您可以选择实施Application
或Service
(即Bound Service
)来存储此LoadInfo
实例以及您的所有活动可以访问此实例。
更多提示:您还可以使用存储此Singleton
实例的LoaderInfo
类,但应在关闭游戏的所有活动后将其删除。
视频:启动画面为Activity
,您必须记住将其从Back Stack
中移除,否则,当用户点击回来时,它会返回到启动{ {1}}。
答案 2 :(得分:-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");