我有以下布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.mkallingal.freakingnav.CardsListFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/darktext"
android:layout_marginBottom="6dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Cards Listing" />
<android.support.v7.widget.RecyclerView android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/rvCardsList"
android:scrollbars="vertical" tools:listitem="@layout/recycler_item_layout">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
问题在于 TextView 始终粘在顶部,而 RecyclerView 占据了屏幕上的剩余空间。我可以水平滚动 recyclerview,但 TextView 只是停留在那里。我该如何解决?
最佳答案
您可以在 recyclerView 的第 0 个元素处添加 Header View/TextView。 这是描述相同内容的好例子。
Is there an addHeaderView equivalent for RecyclerView?
编辑(从提到的链接复制来源) :-
没有像 listview.addHeaderView() 这样的简单方法,但您可以通过向适配器添加标题类型来实现此目的。
举个例子
public class HeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
String[] data;
public HeaderAdapter(String[] data) {
this.data = data;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
//inflate your layout and pass it to view holder
return new VHItem(null);
} else if (viewType == TYPE_HEADER) {
//inflate your layout and pass it to view holder
return new VHHeader(null);
}
throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof VHItem) {
String dataItem = getItem(position);
//cast holder to VHItem and set data
} else if (holder instanceof VHHeader) {
//cast holder to VHHeader and set data for header.
}
}
@Override
public int getItemCount() {
return data.length + 1;
}
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
private boolean isPositionHeader(int position) {
return position == 0;
}
private String getItem(int position) {
return data[position - 1];
}
class VHItem extends RecyclerView.ViewHolder {
TextView title;
public VHItem(View itemView) {
super(itemView);
}
}
class VHHeader extends RecyclerView.ViewHolder {
Button button;
public VHHeader(View itemView) {
super(itemView);
}
}
}
关于android - 如何让 RecyclerView header 不粘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30756624/