gpt4 book ai didi

android - 如何在 recyclerview 中设置可变行高

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:08 25 4
gpt4 key购买 nike

我正在尝试在抽屉导航中创建一个 recyclerview,其标题显示配置文件信息。我希望标题高度比其他行元素高。下面是我的页眉布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="@color/green"
android:orientation="vertical"
android:weightSum="1">



<LinearLayout
android:layout_width="match_parent"
android:layout_height="56dp"
android:orientation="vertical"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">

<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:textColor="#ffffff"
android:text="XXXXX"
android:textSize="32sp"
android:textStyle="bold"
/>

</LinearLayout>

</RelativeLayout>

当我将其设置为回收站 View 的标题时,200dp 高度未反射(reflect)在 UI 中

 RecyclerView.Adapter<NavDrawerListViewHolder> adapter = new NavDrawerListAdapter(this,TITLES,this);
navList.setAdapter(adapter);

下面是 recyclerview 的适配器:

public class NavDrawerListAdapter extends RecyclerView.Adapter<NavDrawerListViewHolder> {

private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
Context mContext;
String[] mCharacterList;
IListItemClickListener mListener;
int holderViewType=0;

public NavDrawerListAdapter(Context context, String[] characters, IListItemClickListener clickListener) {
mContext = context;
mCharacterList = characters;
mListener = clickListener;
}

@Override
public NavDrawerListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
NavDrawerListViewHolder viewHolder;
holderViewType = viewType;
if(viewType == TYPE_HEADER) {
View v = LayoutInflater.from(mContext).inflate(R.layout.header,null);
viewHolder = new NavDrawerListViewHolder(v,TYPE_HEADER,mListener);
} else {
View v = LayoutInflater.from(mContext).inflate(R.layout.nav_item_row,null);
viewHolder = new NavDrawerListViewHolder(v,TYPE_ITEM,mListener);
}

return viewHolder;
}

@Override
public void onBindViewHolder(NavDrawerListViewHolder holder, int position) {
if(holderViewType == TYPE_HEADER) {
Typeface typeface = Typeface.createFromAsset(mContext.getAssets(), "Roboto-Thin.ttf");
holder.name.setTypeface(typeface);
} else {
holder.characterName.setText(mCharacterList[position - 1]);
}

}

@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_HEADER;
}

return TYPE_ITEM;
}

@Override
public int getItemCount() {
return mCharacterList.length + 1;
}

最佳答案

替换:

LayoutInflater.from(mContext).inflate(R.layout.header,null);

与:

LayoutInflater.from(mContext).inflate(R.layout.header, parent, false);

所有其他 inflate() 调用也是如此。如果您知道要膨胀的布局的父容器,请始终将其提供给 inflate() 调用。特别是,RelativeLayout 需要这个,如果它是正在膨胀的布局的 Root View 。

另外,考虑在 Activity 上使用 getLayoutInflater() 而不是 LayoutInflater.from()。如果将 Activity 传递给 from() 可能会得到相同的结果。但是,通常,您总是希望使用了解 Activity 及其主题的 LayoutInflater,以便获得正确的结果。

关于android - 如何在 recyclerview 中设置可变行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com