基本上,我需要在recyclerview中的最后一个元素之后添加一个按钮。那是因为用户可以按此按钮从服务器加载更多内容。
我使用卡片在回收者视图中显示信息,并且我试图用我需要的按钮给特殊卡片充气,但是我不知道在使用光标向最后一张卡片充气之后如何充气这张卡片数据
答案 0 :(得分:2)
您必须覆盖适配器中的getItemViewType(int position)
。
public final int CONTENT_TYPE = 1;
public final int BUTTON_TYPE = 2;
让我们说你的光标数是'x'。对于位置0到(x-1),您将使用光标内容为cardview充气。因此,getItemViewType
将返回位置0到(x-1)的CONTENT_TYPE。接下来,对于位置'x',返回BUTTON_TYPE。
您将在适配器的onCreateXXX
方法中获取视图类型。根据视图类型,膨胀正确的xml(按钮或光标内容)。
确保在getItemCount()方法中返回游标数+ 1。 (+1代表按钮布局)。
答案 1 :(得分:0)
在Recyclerview中构建一个Load More Button。
要做的第一件事是使用按钮创建布局并修改您的视图以获取按钮ID:
然后,制作按钮的一种简单方法是在getItemCount()和标志(即布尔值)上添加+1,以了解是否需要绘制按钮。
带有标志的新getItemCount将如下所示:
private boolean hasLoadButton = true;
public boolean isHasLoadButton() {
return hasLoadButton;
}
public void setHasLoadButton(boolean hasLoadButton) {
this.hasLoadButton = hasLoadButton;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
if (hasLoadButton) {
return data.size() + 1;
} else {
return data.size();
}
}
然后你必须在适配器中覆盖获取视图类型的方法:
private final int TITLE = 0;
private final int LOAD_MORE = 1;
@Override
public int getItemViewType(int position) {
if (position < getItemCount()) {
return TITLE;
} else {
return LOAD_MORE;
}
}
如果位置介于0和data.size() - 1之间,则会有一个typeView作为标题,否则会有一个typeview for load more按钮。
现在我们必须创建视图持有者:
在onCreateViewHolder方法(ViewGroup parent,int viewType)中,y
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
if(viewType == TITLE) {
return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.nav_draw_row, parent, false));
} else if (view type == LOAD_MORE) {
return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.load_more_row, parent, false));
} else {
return null;
}
}
load_more_row
<Button
android:id="@+id/load_more"
android:text="load more !"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
不要忘记更改您的查看者以包含新按钮。
最后是方法onBindViewHolder:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
if(position >= getItemCount) {
holder.loadMore....
} else {
NavDrawerItem current = data.get(position);
holder.title.setText(current.getTitle());
}
}