我有一个垂直滚动的回收视图(verticalRV)。此回收站视图(horizontalRV)中的每个项目都是一个水平回收站视图。
在 verticalRV itemViewHodler 内部,我试图从视图模型中获取数据并观察是否有任何变化并相应地更新 horizontalRV 适配器。
但是观察者是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
我有一个看起来像这样的结构:
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) 通常,我不必将数组切片以将其视为范围.但是,当它作为模板别名参数传递时,我似乎这样做:
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的内联汇编程序和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) 我创建的表格如下:
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
我正在努力将名称传递给一个定义了默认参数值的函数:
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这样全面的语言.
有没有一种简单的方法可以在IntelliJ IDEA中为非Java项目配置完全自定义的构建过程?基本上,我只需要运行一个自定义的shell命令,而不是任何更聪明的构建过程。
我最近在研究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并与一些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函数?
在下面的代码示例中,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)