小编dev*_*cca的帖子

使用AppCompat v21将色调应用于PreferenceActivity小部件

我在PreferenceActivity中使用CheckboxPreference,在v21支持库中使用AppCompat主题.正如您所知,使用这个最新的库小部件,如复选框,editTexts,单选按钮等,都会使用主题中定义的辅助颜色进行着色.在首选项屏幕中,文本是由我的主题指定的正确颜色,但复选框和edittext不是.似乎当CheckboxPreference实例创建窗口小部件时,它不会将我的主题应用于它.

正常布局中的单选按钮,有色:

截图1 http://i59.tinypic.com/2qv9stj.png

来自CheckboxPreference的复选框,没有着色:

截图2 http://i61.tinypic.com/91bcly.png

我用作父主题Theme.AppCompat.Light.NoActionBar.这种情况发生在Preference的每个子类中都有一个小部件,比如说EditTextPreference,其中EditText有一条黑色的底线,而不是有色的线.如何将色调应用于Preference子类显示的小部件?

更新:因为PreferenceActivity扩展了框架Activity,所以不应用着色.在工作案例中,我使用了支持库中的ActionBarActivity.现在的问题是:怎么了?

android tint android-appcompat android-preferences material-design

16
推荐指数
3
解决办法
7207
查看次数

AdMob:"活动已泄露ServiceConnection"和"AdvertisingIdClient unbindService失败".

我在我的应用中使用AdMob.我遵循了实施指南,横幅正确显示并加载了广告.我的MainActivity负责创建引用,构建AdRequest并显示横幅,以及暂停,恢复和销毁AdView.每次加载AdRequest时,调用Activity的onStop()时,都会创建以下异常:

6706-6706/com.rocca.controlloSpese E/ActivityThread? Activity com.rocca.controlloSpese.MainActivity has leaked ServiceConnection com.google.android.gms.common.b@52b1cc3c that was originally bound here
android.app.ServiceConnectionLeaked: Activity com.rocca.controlloSpese.MainActivity has leaked ServiceConnection com.google.android.gms.common.b@52b1cc3c that was originally bound here
        at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:970)
        at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:864)
        at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1577)
        at android.app.ContextImpl.bindService(ContextImpl.java:1560)
        at android.content.ContextWrapper.bindService(ContextWrapper.java:517)
        at com.google.android.gms.ads.identifier.a.b(SourceFile:330)
        at com.google.android.gms.ads.identifier.a.a(SourceFile:187)
        at com.google.android.gms.ads.identifier.a.b(SourceFile:239)
        at com.google.android.a.t.f(SourceFile:132)
        at com.google.android.a.t.b(SourceFile:182)
        at com.google.android.a.q.a(SourceFile:258)
        at com.google.android.a.q.a(SourceFile:195)
        at com.google.android.gms.ads.internal.m.a(SourceFile:107)
        at com.google.android.gms.ads.internal.request.c.a(SourceFile:99)
        at com.google.android.gms.ads.internal.util.b.run(SourceFile:17)
        at com.google.android.gms.ads.internal.util.d.call(SourceFile:29)
        at com.google.android.gms.ads.internal.util.e.call(SourceFile:49)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
Run Code Online (Sandbox Code Playgroud)

接下来是这个信息:

6706-6781/com.rocca.controlloSpese I/AdvertisingIdClient? AdvertisingIdClient unbindService failed.
java.lang.IllegalArgumentException: Service not registered: com.google.android.gms.common.b@52b1cc3c
        at …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks admob

16
推荐指数
1
解决办法
5291
查看次数

是否可以自定义首选项标题布局?

我发现了类似的问题,但无法找到最新的具体答案.我正在使用<preference-header>,根据3.0+设置设计指南(我的目标4.1.2+)来构建我的标题; 我想为这些标题设置自定义布局.请注意,我不想回到此处所述的旧PreferenceScreen方法,因为我不支持较旧的Android版本.

据我所知,这个布局由PreferenceActivity类的私有成员保存,并使用看似不可公开访问的样式属性进行检索:

private int mPreferenceHeaderItemResId = 0;
...
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
...
TypedArray sa = obtainStyledAttributes(null,
            com.android.internal.R.styleable.PreferenceActivity,
            com.android.internal.R.attr.preferenceActivityStyle,
            0);
...
mPreferenceHeaderItemResId = sa.getResourceId(
    com.android.internal.R.styleable.PreferenceActivity_headerLayout,
            com.android.internal.R.layout.preference_header_item);
...
}
Run Code Online (Sandbox Code Playgroud)

然后将此资源传递给专用适配器以填充标头ListView.

有没有办法传递不同的布局资源?

android preferenceactivity android-layout preference-headers

7
推荐指数
1
解决办法
1994
查看次数

使用Dagger 2在库模块中注入应用程序上下文

我正在构建一个具有一些功能的应用程序:ContentProvider,SyncAdapter,作业服务和相关的持久性逻辑.除此之外,还有UI的活动.我试图将所有所述功能放在一个单独的库模块中,因为从理论上讲它们的逻辑是独立的,可以被任何应用程序重用.

现在来了Dagger2.我的库的依赖图的第一个节点(主要组件)确实需要提供Context,并且必须从Application注入此Context,因为库范围与应用程序具有相同的生命周期.显然,要自包含,我的库不应该直接使用我的Application类.

这些是我想到的可能性:

  • 在我的应用程序中构建库的主要组件并将其存储在这里建议的全局静态类/枚举中,但我担心使用这样的静态引用可能是反模式.
  • 在库中打包一个Application类,它构建库范围的Component,将应用程序上下文转换为库中的此类以使用该组件,然后在主应用程序上扩展此Application类.这样可行,但如果有多个库则不再可行.
  • 使用工厂模式:在库组件中提供提供方法,提供工厂,然后将工厂提供本地可用的上下文作为参数.(至于解释这里).这似乎是可行的,但它增加了额外的复杂性.
  • 最后但并非最不重要的是,放弃尝试模块化组件,因为依赖于应用程序上下文打破了模块化的概念.

这样做的正确方法是什么?

android dependency-injection android-library dagger-2

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

绑定类引用返回协变类型的目的是什么?

我正在玩反思,我出现了这个问题.通过::class语法使用绑定类引用时,我得到一个协变的KClass类型:

fun <T> foo(entry: T) {
    with(entry::class) {
       this // is instance of KClass<out T>
    }
}
Run Code Online (Sandbox Code Playgroud)

正如我可以从文档中学习的那样,这将返回对象的确切类型,以防它是子类型的实例T,因此是方差修饰符.但是这会阻止检索在T类中声明的属性并获取它们的值(这是我正在尝试做的)

fun <T> foo(entry: T) {
    with(entry::class) {
       for (prop in memberProperties) {
           val v = prop.get(entry) //compile error: I can't consume T
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现一个解决方案是javaClass.kotlin在对象引用上使用扩展函数,而不是使用不变类型:

fun <T> foo(entry: T) {
    with(entry.javaClass.kotlin) {
       this // is instance of KClass<T>
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,我在运行时获得了确切的类型,并且可以使用该类型.

有趣的是,如果我使用超类型而不是泛型,使用后一种方法我仍然可以访问正确的类型,而不需要方差:

class Derived: Base()

fun foo(entry: Base) {
    with(entry.javaClass.kotlin) {
       println(this == …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-reflect

5
推荐指数
1
解决办法
378
查看次数

如何使用http库捕获SocketException?

其他人已经指出了这个问题(例如here)。尽管我可能已经理解了原因,但是在使用更高级别的http库时仍然找不到解决方案。例如:

import 'package:http/http.dart';

// yes, pwd is String, it's just a test...
Future<Response> login(String user, String pwd) {
  final authHeader = encodeBasicCredentials(user, pwd);
  return get(
    'http://192.168.0.100:8080/login',
    headers: <String, String>{
    HttpHeaders.AUTHORIZATION: authHeader,
    },
  ));
}
Run Code Online (Sandbox Code Playgroud)

SocketException例如,如果无法访问主机(在我的情况下,错误的主机ip),我将找不到捕获被抛出的邮件的方法。我尝试将awaitin 包装try/catch或使用Future.catchError

这是异常的堆栈跟踪:

[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 4036): SocketException: OS Error: Connection refused, errno = 111, address = 192.168.0.100, port = 35588
E/flutter ( 4036): #0      IOClient.send (package:http/src/io_client.dart:30:23)
E/flutter ( 4036): <asynchronous suspension>
E/flutter …
Run Code Online (Sandbox Code Playgroud)

dart dart-http flutter

4
推荐指数
2
解决办法
2209
查看次数