小编Dan*_*Dan的帖子

从Activity的onCreate访问片段视图

我在我的第一应用为Android的过程中,我有一个Fragment是被添加到我ActivityActivityonCreate()方法.我现在面临的问题是,我无法找到任何的内部包含的意见,FragmentActivityonCreate()方法.

其他线程建议这是因为Fragment尚未充气,因此findViewById()将为包含在其中的任何视图返回null Fragment.

这就是我的意思:

活动:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("activity onCreate");
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null) {
        return;
    }

    initialiseUI(); // Fragment added to Activity

    System.out.println("end of activity onCreate");
}
Run Code Online (Sandbox Code Playgroud)

分段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) {
System.out.println("fragment onCreateView");
    return inflater.inflate(R.layout.event_log, container, false);
}
Run Code Online (Sandbox Code Playgroud)

这打印结果:

activity onCreate活动结束onCreate片段onCreateView

因为这个命令,任何试图访问的意见FragmentActivityonCreate()方法(使用 …

android fragment oncreate findviewbyid

28
推荐指数
1
解决办法
3万
查看次数

将Bundle保存到SharedPreferences

我已经竭尽全力让我的Android游戏的所有数据都适合saveInstanceState Bundle.共有很多数据,包括许多Parcelable对象.这可确保当应用程序暂停或方向更改时,重新创建的活动不会丢失任何数据.

但是,我刚刚发现savedInstanceState包显然不适合长期存储.所以我正在寻找一种方法,我可以调整我现有的保存方法作为长期解决方案,以便始终可以恢复游戏状态.

到目前为止,我听说过2个解决方案:

1)使用savedInstanceState包进行方向更改,但在应用程序需要完全关闭时还要包含SharedPrefs.

这看起来非常适得其反,因为它使用2种不同的完全方法来做同样的事情.此外,由于我的savedInstanceState Bundle使用Parcelable对象,因此我必须为这些对象中的每一个提供另一种方法,以使它们能够写入SharedPrefs.基本上很多重复和难以管理的代码.

2)序列化savedInstanceState Bundle并将其直接写入文件.

我对此持开放态度,但我实际上并不知道如何去做.但是,我仍然希望可能有更好的解决方案,因为我听说Android中的序列化"可笑/非常慢".

如果有人能为我提供解决方案,我将非常感激.

android bundle save sharedpreferences

22
推荐指数
2
解决办法
2万
查看次数

使用 ifstream 将二进制数据读入结构体

我正在尝试使用 ifstream 从文件中读取二进制数据。

具体来说,我试图用从文件中读取的数据填充这个“标题”结构:

struct Header {
    char id[16];
    int length;
    int count;
};
Run Code Online (Sandbox Code Playgroud)
  1. 现在,如果我以这种方式读取文件,结果正是我想要的:

    input.read((char*)&hdr, sizeof(hdr));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 但是,如果我改为手动读取结构的每个变量,结果是乱码:

    input.read((char*)&hdr.id,     sizeof(hdr.id));
    input.read((char*)&hdr.length, sizeof(hdr.length));
    input.read((char*)&hdr.count,  sizeof(hdr.count));
    
    Run Code Online (Sandbox Code Playgroud)

我的问题是,这里发生了什么使这两种方法返回不同的结果?

c++ binary struct ifstream

7
推荐指数
2
解决办法
3万
查看次数

分离片段不会触发onSaveInstanceState()

我的Android应用程序有一个ActionBar变化,Fragment占用了一定的FrameLayout.当我onSaveInstanceState更改选项卡时,我试图用来保存片段的状态,以便可以恢复它onCreateView.

问题是,onSaveInstanceState永远不会被称为.在FragmentonDestroyViewonCreateView方法的调用,但Bundle供给onCreateView仍然是零.

有人可以向我解释onSaveInstanceState实际调用的时间,如何确保在切换选项卡时调用它,或者在Fragment分离和重新连接时保存和恢复状态的最佳实践?

分段:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.event_log, container, false);

    // Retrieve saved state
    if (savedInstanceState != null){
        System.out.println("log retrieved");
    } else {
        System.out.println("log null");
    }

    return view;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    System.out.println("log saved");
    super.onSaveInstanceState(outState);
    // more code
}
Run Code Online (Sandbox Code Playgroud)

活动:

/** …
Run Code Online (Sandbox Code Playgroud)

android save detach fragment

6
推荐指数
1
解决办法
8638
查看次数

用C++编写PNG

我试图在Windows 7 64位上使用C++和Visual Studio Express 2013将一些数据写入PNG文件.我明白要做到这一点,我需要使用外部库,但这里是我遇到一些困难的地方.

我尝试使用LodePNG - 它看起来简单,轻巧,易于使用.问题是,它很简单,并且似乎需要某种像素格式的数据与我所拥有的不匹配.我可以修改我的数据以使其与LodePNG兼容,但我更喜欢使用像libpng这样的库,并且具有更大的灵活性.

但是,我不了解构建或链接库的第一件事,并且libpng已经被证明是一个绝对的噩梦.我尝试按照本指南,设法生成"libpng.lib"和"png.h",但是当我尝试将这些文件包含在我的项目中时(我将两个文件放在我的项目目录中,将"png.h"添加到我的项目中)头文件并将"libpng.lib"添加到链接器的"附加依赖关系"字段中),我收到了大量的构建错误,特别是:

error C1083: Cannot open include file: 'pnglibconf.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

任何人都可以请教我如何安装libpng,指导我一个关于这个主题的好指南(我很惊讶那里没有指南...),或推荐一个不同的(轻量级,易于安装)PNG图书馆?我在这里疯了.

c++ png libpng

2
推荐指数
1
解决办法
1万
查看次数