小编syn*_*nic的帖子

SharedPreferences.onSharedPreferenceChangeListener未被一致地调用

我正在注册这样的偏好更改监听器(在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)

麻烦的是,听众并不总是被召唤.它最初几次更改首选项,然后在卸载并重新安装应用程序之前不再调用它.没有重新启动应用程序似乎修复它.

我发现一个邮件列表线程报告了同样的问题,但没有人真正回答他.我究竟做错了什么?

android android-preferences

250
推荐指数
4
解决办法
8万
查看次数

将选择器存储为NSDictionary中的值

有没有办法将选择器存储在一个NSDictionary,而不是存储为NSString

cocoa cocoa-touch nsdictionary selector

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

以编程方式锁定纵向模式以进行某些操作

有没有办法以编程方式在纵向模式下锁定应用程序以进行某些操作,然后在操作完成后恢复(并让应用程序旋转到横向,如果用户按此方式设备)?

android

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

片段,setRetainInstance(true)和线程库

在这里,Dianne说,保留对象的旧方法onRetainNonConfigurationInstance()现在已经过时,因为您可以保留Fragment实例而不是配置更改.

在这里,在片段的API演示,它展示了如何使用这种方法进行配置更改后保持线程.

我看到在配置更改期间,当Fragment可能没有附加到任何活动并且线程完成它正在工作时,它可以调用,wait()以便它不会尝试在未附加Activity时传递结果.我觉得这非常有用,也是一种很好的方法来缓解Android方向变化带来的更多痛苦问题.

但是,如果您正在使用线程库(例如,使用线程执行程序的API库),您无法访问wait()所述线程,那么我们如何利用这一新功能呢?

我们如何确保在未附加活动时不会传递邮件?

我一直在考虑一种方法,可能会在添加新活动时排队消息并发送消息,但我想打听你们,看看你们是否已经提出了一些解决方案.

另外,请注意,我已经查看了LoaderManager API,看起来好像是在显示Activity时需要加载的数据,但不适用于基于事件的事情,比如通过按钮登录等.

android android-fragments

41
推荐指数
1
解决办法
6556
查看次数

基于磁盘的HashMap

Java是否有(或者是否有可用的库)允许我拥有基于磁盘的HashMap?它不需要是原子或任何东西,但它将通过多个线程访问,如果两个同时访问同一个元素,则不应该崩溃.

谁知道什么?

java data-persistence

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

java.lang.StackOverFlow错误.怀疑太多意见?

当您收到类似下面的错误(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)

android android-layout android-view

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

如何声明NSString常量以传递给NSNotificationCenter

我的.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*),但我想知道这样做的正确方法是什么.

iphone

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

设置UIImagePickerController委托会抛出有关UINavigationControllerDelegate的警告

代码:

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协议?

iphone

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

JSON:杰克逊流解析器 - 它真的值得吗?

我在我正在编写的应用程序中大量使用JSON解析.我所做的大部分工作已经使用Android内置的JSONObject库实现(是json-lib吗?).

JSONObject似乎在JSON字符串中创建了绝对所有内容的实例......即使我最终没有使用它们.

我的应用程序目前运行得很好,即使在G1上也是如此.

我的问题是:使用像杰克逊这样的流解析器的速度和内存优势是否值得一试?

麻烦,我的意思是:据我所知,使用Jackson而不是内置库有三个缺点:

  1. 对外部库的依赖.这使你的.apk最终更大.没什么大不了的.
  2. 你的应用程序更脆弱.由于解析不是自动完成的,因此它更容易受到它正在解析的JSON文本的更改(可能我对此错了).
  3. 编写代码以通过流解析器解析JSON是丑陋和乏味的.

android json jackson

15
推荐指数
2
解决办法
8027
查看次数

objective-c - 从另一个构造函数调用

假设您有以下两个构造函数:

- (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)

objective-c

14
推荐指数
2
解决办法
7157
查看次数