我是Android编程的新手,这很难解释,但这是我的情况。
我在public ArrayList<Integer> getLeafValues() {
ArrayList<Integer> leafList = new ArrayList<>();
Tree current = this;
for (Tree t : current.children) {
if (t.children.isEmpty()) {
leafList.add(t.data);
} else {
for (Tree t2 : t.children) {
if (t2.children.isEmpty()) {
leafList.add(t2.data);
} else {
for (Tree t3 : t2.children) {
if (t3.children.isEmpty()) {
leafList.add(t3.data);
}
}
}
}
}
}
return leafList;
}
中使用相同的layout.xml文件获得了2个RecyclerView
我设置了一个静态ViewHolder
,它对于水平滚动RecyclerView以及下面的xml代码都可以正常工作
layout_width
但是第二个垂直滚动的RecyclerView,其中单元格的宽度没有覆盖父级,
是否可以使用与以下相同的布局文件,并能够更改rvFirst.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
以匹配/填充父级?
layout_width
我可以将<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/_150sdp"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/activity_vertical_margin"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/separator"
android:ellipsize="end"
tools:text="Title"
android:maxLines="1"
android:textSize="@dimen/normal_text_size" />
<TextView
android:id="@+id/tvDescrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
tools:text="Description"
android:textSize="@dimen/small_text_size" />
</LinearLayout>
</androidx.cardview.widget.CardView>
参数传递给Adapter和ViewHolder,但是我不知道应该在哪里更改布局
isVertical: Boolean
答案 0 :(得分:1)
在您的Viewholder内部,您必须测试方向(您可以将其作为变量传递给适配器) 然后:
val view = LayoutInflater.from(p0.context).inflate(R.layout.item_layout, p0, false)
if(isVertical){
// width,height
view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}else{
// Here you need to use your 250dp,
// You have to convert the code to Kotlin
float width = getResources().getDimension(R.dimen._150sdp);
view.setLayoutParams(new LayoutParams(width, LayoutParams.WRAP_CONTENT));
}
// No need to pass isVertical to the view holder
return CustomViewHolder(view, isVertical)
答案 1 :(得分:0)
尝试
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@dimen/_150sdp"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/separator"
android:ellipsize="end"
tools:text="Title"
android:maxLines="1"
android:textSize="@dimen/normal_text_size" />
<TextView
android:id="@+id/tvDescrip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
tools:text="Description"
android:textSize="@dimen/small_text_size" />
</LinearLayout>
</androidx.cardview.widget.CardView>
在适配器中...
垂直recyclerview
中使用此
llMain.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
llMain.setOrientation(LinearLayout.VERTICAL);
在水平recyclerview
中使用此
llMain.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
llMain.setOrientation(LinearLayout.HORIZONTAL);
答案 2 :(得分:0)
我可以通过覆盖layout_width
的{{1}}来更改onCreateViewHolder
,
RecyclerView.Adapter