Android:将信息从一个活动传递到另一个活动

时间:2017-08-05 23:32:38

标签: java 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)

目标是将构造更改为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();
    }
}

3 个答案:

答案 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大小,因为它会加载游戏信息。

建议:您可以选择实施ApplicationService(即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");