我想用android的recyclerview创建一个复杂的布局,在布局中,我想把相机按钮固定在左上角,用图库图片把它包起来,我已经检查了flexbox layout manager for recyclerview
,但是它似乎不符合我的用例。
我希望页眉是非重复的,并且不与其他项目一起垂直滚动。以下是页眉的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/shareLayout"
android:layout_width="185dp"
android:layout_height="135dp"
android:layout_below="@id/trendingToolbar"
android:background="@color/black">
<ImageView
android:id="@+id/cameraShareIV"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/camera_white" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cameraShareIV"
android:layout_centerHorizontal="true">
<TextView
android:id="@+id/infoTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginLeft="20dp"
android:gravity="center_horizontal"
android:text="@string/share_pic_video"
android:textColor="@android:color/white"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/infoTxt"
android:layout_marginLeft="16dp"
android:text="@string/share_timeout_txt"
android:textColor="@color/colorPrimaryDark"
android:textSize="11sp"
android:textStyle="bold" />
</RelativeLayout>
在我的活动中,XML是这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="base.android.com.thumbsapp.UI.Fragments.TrendingFragment">
<include layout="@layout/trending_toolbar"
android:id="@+id/trendingToolbar"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/trendingRV"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/trendingToolbar"/>
以前,我把头放在活动XML中,但无法用recyclerview将其封装起来,所以,我决定使用如下适配器:
public class TrendingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = TrendingAdapter.class.getSimpleName();
private Context context;
private List<Trending> itemList;
private static final int HEADER = 0;
private static final int ITEMS = 1;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
switch (viewType){
case HEADER:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.trending_header, parent, false);
return new TrendingHeaderViewHolder(v);
case ITEMS:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.trending_items_layout, parent, false);
return new TrendingItemsViewHolder(v);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Trending tr = itemList.get(position);
if (holder instanceof TrendingHeaderViewHolder){
((TrendingHeaderViewHolder) holder).cameraShareIV.setOnClickListener( view -> {
// TODO: 4/2/2018 select image from gallery
});
} else if (holder instanceof TrendingItemsViewHolder){
// TODO: 4/2/2018 populate gallery items here with picasso
}
}
@Override
public int getItemCount() {
return itemList.size();
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
}
我很困惑如何使标题坚持,也做什么getItemViewType method
。
这是正确的方法吗?有人能帮忙吗?谢谢。
2条答案
按热度按时间px9o7tmv1#
对于这个布局,我建议更好的选择是使用这个标题视图https://github.com/edubarr/header-decor
kognpnkq2#
为了简化操作,我建议您查看this库
在XML“将RecylerView放入
StickyHeaderView
”中,为RecylerView
选择水平或垂直方向为RecyclerView中的每个项目类型创建数据bean类,它们应该扩展
DataBean
,重写方法public boolean shouldSticky()
来决定项目视图是否应该悬浮在顶部。创建
ViewBinder
,将不同类型的视图与特定的数据bean绑定,如您所见,provideViewHolder(View itemView)
对应RecyclerView
中的onCreateViewHolder
,bindView
对应RecyclerView
中的onBindViewHolder
。为
RecyclerView
示例化StickyHeaderViewAdapter
,并为每个项目类型注册ViewBinders
。