在我的应用程序中,用户可以添加产品,当他们这样做时,他们会回到产品列表,这是一个带有CardView项目的RecyclerView。
规范说如果我上传7个图像或产品,则应在RecyclerView上方显示标题并显示进度,如“上传7个项目中的1个”,“上传7个项目中的2个”等等。然后它应该消失,列表视图应该恢复正常。
我尝试将标题视图(并且已成功)附加到RecyclerView,我能够更新其内容并隐藏它,但每当我隐藏它时,仍然留有空白区域,我无法使列表视图恢复到原来的位置,我尝试了很多东西,我甚至把它变成了null,并重新构建了一个新的东西,并重新设置了适配器......没有任何帮助。
所以我决定为RecyclerView.Adapter介绍两种类型的项目 - TYPE_HEADER和TYPE_PRODUCT 现在我正在实现这个,但我想到我不知道如何动态更新TYPE_HEADER项目中的TextView(我使用的处理程序接收来自上传服务的消息,但我不知道如何到达TYPE_HEADER项目在RecyclerView.Adapter中,以便动态更改其TextView。
答案 0 :(得分:1)
我正在使用 RecycleView ,我需要一个可以使用listview向上滚动的标题。我尝试了所有可能的解决方案,这些解决方案可以在向上滚动时创建平滑效果并且没有额外空间。
工作解决方案
我将标题作为listview的一部分。因此,您可以执行相同的操作,当您需要标题时,在列表视图中将其设置为位置0 的项目,并从位置1开始实际列表视图。
当您不需要时,您只需删除位置0处的项目。
这不会给你带来额外空间或其他问题。
此外,您可以在RecycleAdapter中的bindView()中更新其中的Textview。
<强> EDITED 强>
对于一个例子,你有一个广播接收器(或者,它可以是一个按钮点击或任何其他事件)现在说它是时候更新HeaderView内的TextView。
在那个Receiver中,您实际上可以将全局标志设置为true,notifyDataSetChanged(),然后在RecycleAdapter.onBindViewHolder中,根据您的全局标志值,您可以更新TextView。
答案 1 :(得分:1)
由于您知道只需要一个HEADER类型的视图,您可以在适配器中挂起它:
private HeaderViewHolder headerView;
public HeaderViewHolder getHeaderViewHolder()
{
return headerView;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
if(viewType == TYPE_HEADER)
{
if(headerView == null)
{
View view = getLayoutInflater().inflate(R.layout.header, parent, false);
headerView = new HeaderViewHolder(view);
}
return headerView;
}
else
{
//Inflate view normally...
}
}
然后您可以忽略onBindViewHolder
中的标题视图。相反,让活动直接从适配器获取HeaderView
然后,您的活动可以直接从适配器获取HeaderViewHolder
,并根据需要进行更新。