我在我的第一应用为Android的过程中,我有一个Fragment是被添加到我Activity的Activity的onCreate()方法.我现在面临的问题是,我无法找到任何的内部包含的意见,Fragment从Activity的onCreate()方法.
其他线程建议这是因为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
因为这个命令,任何试图访问的意见Fragment中Activity的onCreate()方法(使用 …
我已经竭尽全力让我的Android游戏的所有数据都适合saveInstanceState Bundle.共有很多数据,包括许多Parcelable对象.这可确保当应用程序暂停或方向更改时,重新创建的活动不会丢失任何数据.
但是,我刚刚发现savedInstanceState包显然不适合长期存储.所以我正在寻找一种方法,我可以调整我现有的保存方法作为长期解决方案,以便始终可以恢复游戏状态.
到目前为止,我听说过2个解决方案:
1)使用savedInstanceState包进行方向更改,但在应用程序需要完全关闭时还要包含SharedPrefs.
这看起来非常适得其反,因为它使用2种不同的完全方法来做同样的事情.此外,由于我的savedInstanceState Bundle使用Parcelable对象,因此我必须为这些对象中的每一个提供另一种方法,以使它们能够写入SharedPrefs.基本上很多重复和难以管理的代码.
2)序列化savedInstanceState Bundle并将其直接写入文件.
我对此持开放态度,但我实际上并不知道如何去做.但是,我仍然希望可能有更好的解决方案,因为我听说Android中的序列化"可笑/非常慢".
如果有人能为我提供解决方案,我将非常感激.
我正在尝试使用 ifstream 从文件中读取二进制数据。
具体来说,我试图用从文件中读取的数据填充这个“标题”结构:
struct Header {
char id[16];
int length;
int count;
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我以这种方式读取文件,结果正是我想要的:
input.read((char*)&hdr, sizeof(hdr));
Run Code Online (Sandbox Code Playgroud)但是,如果我改为手动读取结构的每个变量,结果是乱码:
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)我的问题是,这里发生了什么使这两种方法返回不同的结果?
我的Android应用程序有一个ActionBar变化,Fragment占用了一定的FrameLayout.当我onSaveInstanceState更改选项卡时,我试图用来保存片段的状态,以便可以恢复它onCreateView.
问题是,onSaveInstanceState永远不会被称为.在Fragment的onDestroyView和onCreateView方法的调用,但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) 我试图在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图书馆?我在这里疯了.