小编pat*_*ist的帖子

使用GridLayoutManager在RecyclerView中拖放项目

我想要实现的目标:拥有一个带有GridLayoutManager的RecyclerView,它支持drag'n'drop并在拖动时重新排列项目.

旁注:第一次用拖放开发任何东西.

有很多关于如何使用的ListView来实现这一功能的主题,例如:https://raw.githubusercontent.com/btownrippleman/FurthestProgress/master/FurthestProgress/src/com/anappforthat/android/languagelineup/DynamicListView.java

然而,通常的例子是很多的代码,创建拖累视图的位图和感觉应该可以使用来实现相同的结果View.startDrag(...),并与RecyclerView notifyItemAdded(),notifyItemMoved()而且notifyItemRemoved()因为它们提供了重新排列动画.

所以我玩了一些并想出了这个:

final CardAdapter adapter = new CardAdapter(list);
adapter.setHasStableIds(true);
adapter.setListener(new CardAdapter.OnLongClickListener() {
    @Override
    public void onLongClick(View view) {
        ClipData data = ClipData.newPlainText("","");
        View.DragShadowBuilder builder = new View.DragShadowBuilder(view);
        final int pos = mRecyclerView.getChildAdapterPosition(view);
        final Goal item = list.remove(pos);

        mRecyclerView.setOnDragListener(new View.OnDragListener() {
            int prevPos = pos;

            @Override
            public boolean onDrag(View view, DragEvent dragEvent) {
                final int action = dragEvent.getAction();
                switch(action) {
                    case DragEvent.ACTION_DRAG_LOCATION:
                        View onTopOf = mRecyclerView.findChildViewUnder(dragEvent.getX(), dragEvent.getY());
                        int i …
Run Code Online (Sandbox Code Playgroud)

android drag-and-drop gridlayoutmanager android-recyclerview

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

切换 Git 分支时处理 DataBinding 错误

在更改/删除数据绑定布局的 Git 分支之间切换时,我遇到了很多数据绑定问题。在切换 Git 分支时删除文件时,我经常会遇到这样的构建错误:

<path>/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/com/some/package/databinding/SomeLayoutBinding.java:38: error: cannot find symbol
    public final SomeOtherLayoutBinding variable;
Run Code Online (Sandbox Code Playgroud)

...并尝试各种组合

  • 清洁工程
  • ./gradlew cleanBuildCache
  • 将项目与 gradle 同步
  • 无效/重启

但最终都没有解决问题。

我发现唯一有效的方法是清除主目录中的 gradle 缓存,例如:

rm -rf ~/.gradle/caches

然而,这导致我的下一次构建最多需要 10 分钟。

真的应该是这样吗?为什么在切换分支时检测不到文件的添加/删除?

android gradle android-databinding

9
推荐指数
0
解决办法
243
查看次数

Koin 的动态依赖注入是否可行

我正在研究Koin当前Android应用程序中的依赖注入库。

我有一个CoroutineWorker可以完成我所有的背景工作。

我想做的是为我拥有的每种类型的后台工作动态注入一个 lambda。

我有以下有效的代码,但它不是动态的

Koin模块:

const val BackgroundLambdaName: String = "back-ground-lambda"

val lambdaModule = module {

    single(qualifier = named(BackgroundLambdaName)) {
        background
    }
}

private val background: suspend CoroutineScope.(Service) -> Unit = { service: Service ->
    val limit: Int = 200
    var offset: Int = 0

    loop@ while (true) {

        val networkResponse = service.move(options = mutableMapOf("limit" to limit, "offset" to offset))

        if (networkResponse.next == null) {
            break@loop
        }
        offset += limit
    }
}
Run Code Online (Sandbox Code Playgroud)

而我的 …

android koin

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

在Kotlin中沟通父类及其内部类的最佳方法是什么?

在Java中,如果我有一个类,并且在其中有另一个子类,则子类可以访问其父类方法,但是例如,这在kotlin中给出了错误

class A {
    static int methodSum(int a, int b) {
        return a+b;
    }

    static final class Try {
        void tryPrint() {
            System.Out.println(methodSum(2,3).toString())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是同样,我无法在Kotlin中实现它给我带来的错误。什么是实现这一目标的最佳方法。

java class kotlin

0
推荐指数
1
解决办法
63
查看次数