小编Eve*_*Eve的帖子

在Recyclerview之外拖放视图

我想要实现的目标:我希望在一个可滚动的布局(Recyclerviewwith GridlayoutManager)中有一个视图,其中包含tile(Views).拖放项目内部的项目RecyclerView应调整图标的位置并与其他元素交换.拖动开始时,上方的图标RecyclerView将更改为垃圾桶图标,将视图拖动到此图标将从中删除它RecyclerView.

初始状态开始拖动View5将View5拖到垃圾桶图标View5已删除,其他视图也随之移动

我尝试了这个优秀的教程,但我没有找到一种方法如何处理拖动外部Recyclerview作为ItemTouchHelper.Callback仅使用Recycler.ViewHolder元素作为可能的目标.

interpolateOutOfBoundsScroll()如果视图移出边界,该方法会给出反馈,但只返回屏幕外的总大小,但没有坐标.此外,尝试将视图拖出Recyclerview总是导致切割视图通过其边界Recyclerview.

有谁知道我怎么能达到这个效果?

android drag-and-drop gridlayoutmanager android-recyclerview

10
推荐指数
2
解决办法
4366
查看次数

Android studio突然显示完整的文件夹名称,如何更改

Android Studio突然在项目视图中显示文件夹的全名,我不知道如何更改它.我尝试使用项目视图中选项菜单中的设置更改视图(展平包检查/取消选中,压缩空中间包检查/取消选中),但它没有更改.

这是我的项目视图过去的样子:

在此输入图像描述

这就是它现在的样子:

在此输入图像描述

在我看来,myapp文件夹中的每个文件夹突然有完整的appid +它自己的名称作为foldername.我尝试使用这些命令重置Android Studio设置(我是一个mac用户):

rm -Rf ~/Library/Preferences/AndroidStudio*
rm ~/Library/Preferences/com.google.android.studio.plist
rm -Rf ~/Library/Application\ Support/AndroidStudio*
rm -Rf ~/Library/Logs/AndroidStudio*
rm -Rf ~/Library/Caches/AndroidStudio*
Run Code Online (Sandbox Code Playgroud)

仍然没有变化.我目前的Android Studio版本是Android Studio 2.2,内部版本号为AI-145.3276617.

我唯一做的就是昨天更新到最新的稳定的Android 2.2版本,我不知道这是否改变了应用程序的显示方式,另一个项目(以前的屏幕截图)似乎根本没有受到影响.

android android-studio android-studio-2.2

8
推荐指数
2
解决办法
1681
查看次数

找不到命令aapt

我想在Mac上使用带有android sdk的aapt命令(文件夹/build-tools/24.0.1).但每当我尝试使用该命令时,我都会收到命令未找到的消息(aapt/aapt2).这在终端和Android Studio中都不起作用.

如果我列出了24.0.1中的可用命令.终端中的文件夹,两个命令旁边都有一个星号,描述如下:

A star (*) next to a name means that the command is disabled.
Run Code Online (Sandbox Code Playgroud)

如何再次启用这些命令?更新构建工具没有帮助.

macos android aapt android-sdk-tools

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

使用Dagger 2在App中使用Robolectric进行测试的Android应用程序类

在测试方面,我是一个完全的初学者,我目前的任务是修复一个问题,阻止现有的测试运行.

使用的几个测试Robolectric失败并显示错误消息

java.util.ServiceConfigurationError: org.robolectric.internal.ShadowProvider: Provider org.robolectric.Shadows not a subtype
    at java.util.ServiceLoader.fail(ServiceLoader.java:239)
    at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
Run Code Online (Sandbox Code Playgroud)

我在这篇 Github帖子中读到,如果环境配置存在问题,可能会发生此错误.经过一些测试后,我可以将问题缩小到两个方法中Application class,initPicassoinitJobDispatcher初始化Picasso一个Firebase正在运行的作业

public class MyApplication extends Application {

    private ApplicationComponent applicationComponent;

    @Override
    public void onCreate() {
        super.onCreate();

        Timber.plant(new Timber.DebugTree());
        AndroidThreeTen.init(this);

        Fabric.with(this, new Crashlytics());
        initPicasso();

        applicationComponent = DaggerApplicationComponent.builder().applicationModule(new ApplicationModule(this)).build();

        initJobDispatcher();
    }

    void initPicasso() {
        final String PICASSO_CACHE = "picasso-cache";

        File cacheDir = new File(getApplicationContext().getCacheDir(), PICASSO_CACHE);
        if (!cacheDir.exists()) { …
Run Code Online (Sandbox Code Playgroud)

android unit-testing robolectric dagger-2

5
推荐指数
0
解决办法
1496
查看次数

在具有相同凭据的两个 Android 应用程序之间共享登录数据

问题:

我有两个Android应用程序,它们使用相同的登录数据。产品所有者希望在这两个应用程序之间启用无缝登录,这意味着用户应该只登录一个应用程序,然后登录第二个应用程序,而无需输入凭据。

研究可能的选择:

我读了很多,但我还没有找到解决方案。一种选择是sharedUserId在清单中添加一个,但据说这仅在尚未发布应用程序时才有效,否则用户将无法再访问其旧保存的数据。由于我的一个应用程序就是这种情况,因此已取消此选项。

其他我读过AccountManager,这也在这篇reddit 帖子中提出,但也提到了一些问题,即不应在帐户管理器中保存密码。我的应用程序没有用于进一步身份验证的令牌,只有密码,所以我不确定是否AccountManager是一个不错的选择。

我还听说有KeyChain用于系统范围凭据的Api,但我还不确定AccountManager和之间的区别在哪里KeyChain

我发现的最新一个是Smart Lock,但是从文档中我没有发现是否有办法在应用程序之间而不是在应用程序和网站之间共享凭据,而且这是物理设备的密码,这不是一个选项以便产品所有者看到一条 Google 消息,表明此密码已保存在云中的某个位置。

题:

在研究了所有这些可能性之后,我仍然不知道哪个选项最适合我的情况。在我的情况下,什么是保存凭据的好选择?

security authentication android login

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

Java泛型方法声明基础

我开始学习GenericsJava,我看几个教程,但我有点迷茫,不知道如何泛型方法声明。

当我使用泛型类型时,定义方法的正确顺序是什么?我找到了这个示例,什么时候需要使用尖括号,什么时候不需要?

public class Box<A> {

    private A a;
    ...

    public void setA(A a) {
        this.a = a;
    }

    public <A> List<A> transform(List<A> in) {
        return null;
    }

    public static <A> A getFirstElement(List<A> list) {
        return null;
    }

    public A getA() {
        return a;
    }
Run Code Online (Sandbox Code Playgroud)

java generics declaration

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

Rxjava静态通用实用方法,带变压器

最近我看到一篇RxJava文章解释Transformers并强调了它们如何用于重用Schedulers.我尝试使用它并在同一个类中,这个方法工作正常:

<T>Observable.Transformer<T, T> applySchedulers() {
        return new Observable.Transformer<T, T>() {
            @Override
            public Observable<T> call(Observable<T> observable) {
                return observable
                        .subscribeOn(Schedulers.io())
                        .unsubscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread());
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

我想用静态方法将它移动到一个帮助器类中,这样我就可以在我的整个Android应用程序中使用它.但是当我尝试使用这个类的方法时

public class RxFunctions {

    public static <T>Observable.Transformer<T, T> applySchedulers() {
        return new Observable.Transformer<T, T>() {
            @Override
            public Observable<T> call(Observable<T> observable) {
                return observable
                        .subscribeOn(Schedulers.io())
                        .unsubscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread());
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个班级里面

public void requestLoginState() {
        restClient.requestLoginState()
                .compose(RxFunctions.applySchedulers())
                .subscribe(new TimberErrorSubscriber<LoginStateResponse>() {
                    @Override
                    public void onCompleted() {
                    } …
Run Code Online (Sandbox Code Playgroud)

android rx-java

2
推荐指数
1
解决办法
2152
查看次数