小编Max*_*aev的帖子

如何将 livedata 和 viewmodel 与 Viewholder 作为生命周期所有者一起使用?

我有一个垂直滚动的回收视图(verticalRV)。此回收站视图(horizo​​ntalRV)中的每个项目都是一个水平回收站视图。

在 verticalRV itemViewHodler 内部,我试图从视图模型中获取数据并观察是否有任何变化并相应地更新 horizo​​ntalRV 适配器。

但是观察者是onChanged方法没有被调用。

我已经实现了 LifecycleOwner 接口来管理带有 livedata 的视图持有者的生命周期,并相应地从 verticalRV 的适配器中设置状态

public class VeritcalRVHolderItem implements LifecycleOwner {
    private static final String TAG = LDFeedListAdapterHolder.class.getSimpleName();
    private final FragmentActivity activity;
    private final RvHorizontalListAdapter adapter;
    private RecyclerView rvHorizontalList;


    public VeritcalRVHolderItem(Context context, View itemView, FragmentActivity activity) {
        super(context, itemView);
        this.activity = activity;
        rvHorizontalList = itemView.findViewById(R.id.rvHorizontalList);
        LinearLayoutManager layout = new LinearLayoutManager(getContext(), LinearLayout.HORIZONTAL, false);
        rvHorizontalList.setLayoutManager(layout);
        adapter = new RvHorizontalListAdapter(this.activity);
        rvHorizontalList.setAdapter(adapter);
        LDViewModel LDViewModel = ViewModelProviders.of(activity).get(LDViewModel.class);
        LDViewModel.getTopicsForFeed().observe(this, new Observer<List<Topic>>() {
            @Override
            public …
Run Code Online (Sandbox Code Playgroud)

android mvvm viewmodel android-recyclerview android-livedata

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

迭代dlang结构

我有一个看起来像这样的结构:

struct MultipartMessage {
    ubyte[] mime, data;
    Header header;

    void setSender(string sender) {
        header.sender = sender;
    }
    void setId(int id) {
        header.id = id;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想迭代它,在另一个类中使用这样的东西:

struct Socket {
    ...

    void send(MultipartMessage msg) {
        foreach (part; msg) {
            sendPart(part);
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?我想使用类似于Python的东西 __iter__,MultipartMessage它可以按特定的顺序返回字段,理想情况下甚至可以运行一些额外的代码,比如header.serialize().

理想情况下,我会添加一个函数MultipartMessage,看起来像这样(伪代码):

ubyte[] __iter__() {
    yield mime;
    yield data;
    yield header.serialize(); //header.serialize returns a ubyte[]
}
Run Code Online (Sandbox Code Playgroud)

iteration d

6
推荐指数
2
解决办法
717
查看次数

为什么我必须切片数组以将其用作别名参数中的范围?

通常,我不必将数组切片以将其视为范围.但是,当它作为模板别名参数传递时,我似乎这样做:

enum test(alias fun) = "it works";

immutable a = [1,2,3];

pragma(msg, test!(a[].map!(x => x))); // OK
pragma(msg, test!(a.map!(x => x)));   // map is not a member of a

// but a.map does work at runtime ...
unittest {
    auto r = a.map!(x => x);
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

d

6
推荐指数
0
解决办法
131
查看次数

SSE与函数的陌生感

我一直在玩D的内联汇编程序和SSE,但发现了一些我不理解的东西.当我尝试在声明后立即添加两个float4向量时,计算是正确的.如果我把计算放在一个单独的函数中,我得到一系列的nans.

//function contents identical to code section in unittest
float4 add(float4 lhs, float4 rhs)
{
    float4 res;
    auto lhs_addr = &lhs;
    auto rhs_addr = &rhs;
    asm
    {
        mov RAX, lhs_addr;
        mov RBX, rhs_addr;
        movups XMM0, [RAX];
        movups XMM1, [RBX];

        addps XMM0, XMM1;
        movups res, XMM0;
    }
    return res;
}

unittest
{
    float4 lhs = {1, 2, 3, 4};
    float4 rhs = {4, 3, 2, 1};

    println(add(lhs, rhs)); //float4(nan, nan, nan, nan)

    //identical code starts here
    float4 res;
    auto …
Run Code Online (Sandbox Code Playgroud)

sse d inline-assembly

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

Postgresql PQgetvalue:数组返回

我创建的表格如下:

CREATE TABLE tbl_test
(
  id        bigserial    PRIMARY KEY,
  interest  int          ARRAY[2]
);
Run Code Online (Sandbox Code Playgroud)

PGresult* res用了PQexec(conn, "SELECT * FROM tbl_test");

现在,我怎样才能int[]PQgetvalue(res, 0, 1).
我不想依赖于定义的结构,array.h因为它们可能会改变.

我在Postgresql文档中找不到任何可以执行操作的API.
请指教.

此致,
Mayank

c postgresql libpq

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

如何在D中的函数中输入by-name参数?

我正在努力将名称传递给一个定义了默认参数值的函数:

import std.stdio;

void main() {

    void foo(int x=1, int y=2, int z=3) {
        writefln("x=%s, y=%s, z=%s", x, y, z);
    }

    foo(10, 20, 30); // ok, prints: x=10, y=20, z=30

    foo(z=30); // Error: undefined identifier 'z'
}
Run Code Online (Sandbox Code Playgroud)

这是一个非常基本的需求.这样的函数可以有10个或更多参数,并且可以使用不同的参数集多次调用.每次列出所有的args是难以忍受的 - 它需要精确的位置知识,甚至可以在我的应用程序的新版本中更改.或者我的应用程序的新版本可以更改默认值,我必须通过我的所有源代码来更改它.

我认为基本的东西必须是像D这样全面的语言.

d

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

如何将自定义构建脚本添加到IDEA?

有没有一种简单的方法可以在IntelliJ IDEA中为非Java项目配置完全自定义的构建过程?基本上,我只需要运行一个自定义的shell命令,而不是任何更聪明的构建过程。

intellij-idea

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

为什么int x = 08; 当int x = 078时有效; 在`DMD`中无效?

我最近在研究D编程语言中的文字细节.

由于八进制文字使用0的前缀,数字,int x = 078;是无效的自然.但那么为什么int x = 08;DMD中有效呢?

但是,我已经用GCC(C编译器)对它进行了测试,发现它们都是无效的.

import std.stdio;

int main(string[] args)
{
    // int x = 078; // error here: radix 8 digit expected, not '8'
    int x = 08; // but no error here
    writeln("x = ", x);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是DMD中的错误吗?提前致谢.

NB我正在使用DMD32 D Compiler v2.071.2-b2(Win32版本).

d literals dmd

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

从C到D的数组指针

我正在使用D并与一些C库连接.因此,我必须将D数组转换为C的指针(例如short*).目前我只是像这样投射他们:

int[] dArray = [0, 1, 2, 3, 4];
myCFunction(cast(int*) dArray);
Run Code Online (Sandbox Code Playgroud)

这不安全吗?我试着这样做:

myCFunction(&dArray);
Run Code Online (Sandbox Code Playgroud)

但这样做会给函数一个int []*而不是int*.我看到在C++中有些人采用这样的第一个元素:

myCFunction(&dArray[0]);
Run Code Online (Sandbox Code Playgroud)

但是那个指针不会只指向第一个元素吗?因为我来自Java世界,所以我不熟悉指针和参考.

如何将数组转换为指针,以便将其传递给C函数?

c arrays pointers d

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

在构造函数中初始化实例变量有什么区别?

在下面的代码示例中,milk由构造函数初始化,而egg不是.milk.spill()不是段错误,但egg.crack()确实如此.初始化实例变量的两种方法有什么区别?为什么前者正确而后者导致段错误?

import std.stdio;

void main() {
  auto k = new Kitchen();
  k.pollute();
}

class Kitchen {
  Milk milk;
  Egg egg = new Egg();

  this() {
    milk = new Milk();
  }

  void pollute() {
    writeln("spilling milk");
    milk.spill();
    writeln("cracking egg");
    egg.crack();
  }
}

class Milk {
  bool spilt = false;
  void spill() { spilt = true; }
}

class Egg {
  bool cracked = false;
  void crack() { cracked = true; }
}
Run Code Online (Sandbox Code Playgroud)

d

4
推荐指数
1
解决办法
71
查看次数