在Android 3.0的,当你选择,例如一些文本,将动作条切换到文本菜单式模式,使您能够与所选文本做的动作:复制/股/ etc和"完成"按钮将出现在左侧使用户能够离开此模式.
如何在我的应用程序中将ActionBar切换到此模式(当然是我的菜单项)?我在文档中找不到这个.
是否有一个总是在onResume()之后调用的回调?我需要它,因为AFAIK,在onResume()之后,布局中的每个View都被渲染了,所以我可以测量它们的尺寸.
谢谢.
我有一个使用片段的Activity.根据用户的交互,这些片段可能会来来去去.其中许多片段将作业发送到IntentService,这样就可以以异步方式运行.IntentService应该如何报告这些工作的结果?
启动该作业的片段可能不存在.如果作业完成且起始片段当前处于活动状态,则应该收到相关通知,并采取相应措施.如果不是,那么就不需要采取任何行动.
我曾考虑使用广播意图和BroadcastReceiver组件,但片段不能注册接收者,只能注册活动.
你会建议什么解决方案?
据我所知,Loader框架适用于访问ContentProvider/SQLite数据库中本地存储的数据.我们有CursorLoader类可以很好地处理这个用例.
但我想知道使用Loader框架编写扩展Loader/AsyncTaskLoader以访问远程Web服务(例如REST Web服务)的类是否切实可行?我一直认为这个框架对于这个用例来说有点过于僵化和混乱(缺乏适当的文档).我更喜欢使用AsyncTasks/Services以更常规的方式处理REST调用.但最近我发现一些使用AsyncTaskLoaders的文章并开始怀疑.
那么为什么有人会使用Loaders来访问Web服务呢?我在这里看到的唯一优势是装载机自动保留其结果.之后没有Cursor可以管理.
我想在一个项目中使用标题中提到的库.
但是,两者都需要我的活动从一个特殊的Activity类扩展:在Roboguice的情况下它是RoboAcitivity,它是ActionbarSherlock的FragmentActivity.
ActionbarSherlock扩展了兼容性库,这很好,因为我还需要使用片段,而项目级别是<API级别11.
有人有成功吗?由于Java不支持多重继承(通常这是一件好事),我试图在ActionbarSherlock项目中使用FragmentActivity来扩展RoboActivity而不是标准的Activity.但我无法通过这种方式进行编译.
控制台输出的一部分是:
[2011-10-15 17:46:31 - RetainFragmentTest2] /Users/scythe/JavaLibs/JakeWharton-ActionBarSherlock-a4855d0/library/res/values-v11/abs__styles.xml:170: error: Error: No resource found that matches the given name: attr 'android:logo'.
[2011-10-15 17:46:31 - RetainFragmentTest2] /Users/scythe/JavaLibs/JakeWharton-ActionBarSherlock-a4855d0/library/res/values-v11/abs__styles.xml:171: error: Error: No resource found that matches the given name: attr 'android:navigationMode'.
[2011-10-15 17:46:31 - RetainFragmentTest2] /Users/scythe/JavaLibs/JakeWharton-ActionBarSherlock-a4855d0/library/res/values-v11/abs__styles.xml:174: error: Error: No resource found that matches the given name: attr 'android:progressBarPadding'.
[2011-10-15 17:46:31 - RetainFragmentTest2] /Users/scythe/JavaLibs/JakeWharton-ActionBarSherlock-a4855d0/library/res/values-v11/abs__styles.xml:176: error: Error: No resource found that matches the given name: attr 'android:subtitle'.
[2011-10-15 17:46:31 - RetainFragmentTest2] /Users/scythe/JavaLibs/JakeWharton-ActionBarSherlock-a4855d0/library/res/values-v11/abs__styles.xml:177: error: Error: …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我必须从众多Web服务下载JSON数据.我使用的数据类相当复杂(很多属性,非常深的继承树等).
我打算使用单个db表进行缓存,我将下载的JSON数据存储在VARCHAR列中(以及包含其他元数据的列).JSON序列化正在使用Gson库完成.
将实例转储到JSON中并在以后需要时再次解析它们似乎很方便.无需为每个类创建自定义表,也无需编写大量自定义序列化代码.此外,我可以通过这种方式对缓存表进行查询.
问题:这种方法无论如何都是反模式的吗?
我在ListView的每一行都有一个ViewPager小部件.这提供了类似于架子的UI,因此用户可以在垂直方向上滚动搜索架子,然后在架子的内容中水平滚动.这有效.
但是滚动体验非常糟糕:如果我开始拖动一个架子的ViewPager,水平滚动它,不小心向上/向下拖动一下,然后ListView"陷阱"这个拖动动作,并开始垂直滚动,结束我的水平拖动.在这种状态下,拖动动作不会"返回"到ViewPager,ListView拥有它,就是这样.我必须再次启动另一个拖动操作来影响ViewPager.所以我猜ListView在这些情况下具有优先权.
怎么解决这个问题?我想要完全相反:如果列表行中的ViewPager开始对水平拖动做出反应,那么它应该捕获该动作,并且无论用户如何移动他/她的手指,此拖动都应该停止影响ListView垂直.可以这样做吗?
这是导致问题的场景:
片段A抛出此异常,因为我在其onSaveInstanceState()方法中保存了一些视图值(例如EditTexts).看来,在第二次旋转时,系统不会实例化这些视图,所以当我询问它们的值时,我会得到一个NullPointer异常.这可以以某种方式避免吗?或者是在片段交易中使用.replace操作保存在backstack上?
Google Play应用程序以类似GridView的方式显示不同类别的顶级列表(屏幕截图).我很确定它不是标准的GridView,因为当我一直滚动到底部时,它会显示一个屏幕范围的"加载"项,据我所知,这是标准GridView无法实现的.
我可以在某个地方找到这个ViewGroup的代码吗?如果不是,那么实现这样一个ViewGroup的最佳方式是什么?我正在考虑使用ListView来处理它,但它需要一个非常混乱的适配器,根据可用的屏幕宽度,将多个列表项放在一行中.
假设我有以下RxJava代码(访问数据库,但确切的用例是无关紧要的):
public Observable<List<DbPlaceDto>> getPlaceByStringId(final List<String> stringIds) {
return Observable.create(new Observable.OnSubscribe<List<DbPlaceDto>>() {
@Override
public void call(Subscriber<? super List<DbPlaceDto>> subscriber) {
try {
Cursor c = getPlacseDb(stringIds);
List<DbPlaceDto> dbPlaceDtoList = new ArrayList<>();
while (c.moveToNext()) {
dbPlaceDtoList.add(getDbPlaceDto(c));
}
c.close();
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(dbPlaceDtoList);
subscriber.onCompleted();
}
} catch (Exception e) {
if (!subscriber.isUnsubscribed()) {
subscriber.onError(e);
}
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
鉴于此代码,我有以下问题:
如果有人从此方法返回的observable取消订阅(在之前的订阅之后),该操作是否是线程安全的?那么无论调度如何,我的'isUnsubscribed()'检查在这个意义上是否正确?
有没有更清晰的方法,用更少的样板代码来检查未订阅的状态,而不是我在这里使用的?我在框架中找不到任何东西.我认为SafeSubscriber解决了订阅者取消订阅时不转发事件的问题,但显然没有.