我正在注册这样的偏好更改监听器(在onCreate()我的主要活动中):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(
SharedPreferences prefs, String key) {
System.out.println(key);
}
});
Run Code Online (Sandbox Code Playgroud)
麻烦的是,听众并不总是被召唤.它最初几次更改首选项,然后在卸载并重新安装应用程序之前不再调用它.没有重新启动应用程序似乎修复它.
我发现一个邮件列表线程报告了同样的问题,但没有人真正回答他.我究竟做错了什么?
有没有办法将选择器存储在一个NSDictionary,而不是存储为NSString?
有没有办法以编程方式在纵向模式下锁定应用程序以进行某些操作,然后在操作完成后恢复(并让应用程序旋转到横向,如果用户按此方式设备)?
在这里,Dianne说,保留对象的旧方法onRetainNonConfigurationInstance()现在已经过时,因为您可以保留Fragment实例而不是配置更改.
而在这里,在片段的API演示,它展示了如何使用这种方法进行配置更改后保持线程.
我看到在配置更改期间,当Fragment可能没有附加到任何活动并且线程完成它正在工作时,它可以调用,wait()以便它不会尝试在未附加Activity时传递结果.我觉得这非常有用,也是一种很好的方法来缓解Android方向变化带来的更多痛苦问题.
但是,如果您正在使用线程库(例如,使用线程执行程序的API库),您无法访问wait()所述线程,那么我们如何利用这一新功能呢?
我们如何确保在未附加活动时不会传递邮件?
我一直在考虑一种方法,可能会在添加新活动时排队消息并发送消息,但我想打听你们,看看你们是否已经提出了一些解决方案.
另外,请注意,我已经查看了LoaderManager API,看起来好像是在显示Activity时需要加载的数据,但不适用于基于事件的事情,比如通过按钮登录等.
Java是否有(或者是否有可用的库)允许我拥有基于磁盘的HashMap?它不需要是原子或任何东西,但它将通过多个线程访问,如果两个同时访问同一个元素,则不应该崩溃.
谁知道什么?
当您收到类似下面的错误(Android 1.5)时,是因为嵌套的ViewGroup太多,还是因为View的总数太大了?是否有任何技巧可以解决它,同时仍然保持您的应用程序相同的外观?
java.lang.StackOverflowError
at android.text.Styled.measureText(Styled.java:371)
at android.text.Layout.measureText(Layout.java:1600)
at android.text.Layout.getLineMax(Layout.java:654)
at android.text.Layout.draw(Layout.java:310)
at android.text.BoringLayout.draw(BoringLayout.java:356)
at android.widget.TextView.onDraw(TextView.java:3921)
at android.view.View.draw(View.java:5838)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.widget.AbsListView.dispatchDraw(AbsListView.java:1319)
at android.widget.ListView.dispatchDraw(ListView.java:2820)
at android.view.View.draw(View.java:5944)
at android.widget.AbsListView.draw(AbsListView.java:2121)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.View.draw(View.java:5841)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.ViewGroup.drawChild(ViewGroup.java:1484)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.View.draw(View.java:5841)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.View.draw(View.java:5841)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.View.draw(View.java:5841)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1228)
at android.view.View.draw(View.java:5841)
at android.widget.FrameLayout.draw(FrameLayout.java:352)
at android.view.ViewGroup.drawChild(ViewGroup.java:1486)
at …Run Code Online (Sandbox Code Playgroud) 我的.h文件中有以下内容:
#ifndef _BALANCE_NOTIFICATION
#define _BALANCE NOTIFICATION
const NSString *BalanceUpdateNotification
#endif
Run Code Online (Sandbox Code Playgroud)
以及我的.m文件中的以下内容:
const NSString *BalanceUpdateNotification = @"BalanceUpdateNotification";
Run Code Online (Sandbox Code Playgroud)
我使用以下代码:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(updateBalance:)
name:BalanceUpdateNotification
object:nil];
Run Code Online (Sandbox Code Playgroud)
和
[[NSNotificatoinCenter defaultCenter]
postNotificationName:BalanceUpdateNotification
object:self userInfo:nil];
Run Code Online (Sandbox Code Playgroud)
哪个有效,但它给了我一个警告:
Passing argument 1 of 'postNotificationName:object:userInfo' discards qualifiers from pointer target type
Run Code Online (Sandbox Code Playgroud)
所以,我可以将其转换为(NSString*),但我想知道这样做的正确方法是什么.
代码:
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self.navigationController presentModalViewController:picker animated:YES];
[picker release];
Run Code Online (Sandbox Code Playgroud)
警告出现picker.delegate = self;在线上:
Class 'CardEditor' does not implement the 'UINavigationControllerDelegate' protocol
Run Code Online (Sandbox Code Playgroud)
为什么UIImagePickerController会关心我的类是否实现了UINavigationControllerDelegate协议?
我在我正在编写的应用程序中大量使用JSON解析.我所做的大部分工作已经使用Android内置的JSONObject库实现(是json-lib吗?).
JSONObject似乎在JSON字符串中创建了绝对所有内容的实例......即使我最终没有使用它们.
我的应用程序目前运行得很好,即使在G1上也是如此.
我的问题是:使用像杰克逊这样的流解析器的速度和内存优势是否值得一试?
麻烦,我的意思是:据我所知,使用Jackson而不是内置库有三个缺点:
假设您有以下两个构造函数:
- (id)initWithTitle:(NSString *)title;
- (id)initWithTitle:(NSString *)title page:(NSString *)page;
Run Code Online (Sandbox Code Playgroud)
第二个构造函数与第一个构造函数没有区别,只是它设置了成员变量"page".
既然它基本上必须做同样的事情,有没有办法从第二个调用第一个来减少代码重复,或者你是否必须设置第三个方法来执行常见任务?
我正在谈论与此类似的事情,但我怀疑这会起作用:
- (id)initWithTitle:(NSString *)_title {
if(self = [super init]) {
self.title = _title;
}
return self;
}
- (id)initWithTitle:(NSString *)_title page:(NSString *)_page {
if(self = [self initWithTitle:_title]) {
self.page = _page;
}
return self;
}
Run Code Online (Sandbox Code Playgroud) android ×5
iphone ×2
android-view ×1
cocoa ×1
cocoa-touch ×1
jackson ×1
java ×1
json ×1
nsdictionary ×1
objective-c ×1
selector ×1