我正在尝试编写自己的习惯View
,但我遇到了问题LayoutParams
.
想法是扩展ViewGroup
(LinearLayout
)
public class MyView extends LinearLayout{
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context) {
super(context);
}
public void putContent(){
setOrientation(HORIZONTAL);
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < 5; i++){
View view = inflater.inflate(R.layout.item, null);
TextView tv = (TextView)view.findViewById(R.id.item_text);
tv.setText("Item " + i);
addView(view);
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,putContent
方法会使项目膨胀并添加到我的视图中.这是一个项目布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<TextView android:text="TextView"
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Robolectric单元测试,它要求我在测试视图数据绑定类(ViewDataBinding
)下使用该活动,遗憾的是没有运气我被困在单元测试中为null
里面的MainActiviy
类:
...
ActivityMainBinding binding; // <-- this field returns null inside unit test
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
}
...
Run Code Online (Sandbox Code Playgroud)
如果有人编写了具有类似要求的测试,那么您是否可以演示一个示例,说明如何ViewDataBinding
在测试完成之前分配分类.谢谢!
注意:我正在使用
Android Studio 2.2
我已经创建了一个辅助方法buildChain
,它实际上创建了一个对象链,因为它们实现了接口IChain<T>
并设置了契约next
成员
代码
interface Chain<T> {
var next: T?
operator fun plus(next: T): T?
}
fun <T : Chain<T>> buildChain(first: T, vararg members: T): T {
var next: T? = null
members.forEachIndexed { i, t ->
if (i == 0) {
next = first + t
} else {
next = next?.run { this + t }
}
}
return first
}
Run Code Online (Sandbox Code Playgroud)
实施例
data class Person(val name: String) : Chain<Person> {
override var next: Person? …
Run Code Online (Sandbox Code Playgroud)