Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何动态更改ListView/RecyclerListView中项目的内容_Android_Listview_Android Listview_Android Recyclerview - Fatal编程技术网

Android 如何动态更改ListView/RecyclerListView中项目的内容

Android 如何动态更改ListView/RecyclerListView中项目的内容,android,listview,android-listview,android-recyclerview,Android,Listview,Android Listview,Android Recyclerview,在我的应用程序中,用户可以添加产品,当他们添加产品时,他们会返回到产品列表,这是一个包含CardView项目的RecyclerView视图 该规范规定,如果我上传7个图像或产品,则应在RecyclerView上方显示标题并显示进度,如“上传7个项目中的1个”、“上传7个项目中的2个”等。然后它应该消失,listview应该恢复正常 我尝试将标题视图附加到RecyclerView(并成功),我可以更新它的内容并隐藏它,但每当我隐藏它时,都会有一个空的空间,我无法使listview返回到其原始位置,

在我的应用程序中,用户可以添加产品,当他们添加产品时,他们会返回到产品列表,这是一个包含CardView项目的RecyclerView视图

该规范规定,如果我上传7个图像或产品,则应在RecyclerView上方显示标题并显示进度,如“上传7个项目中的1个”、“上传7个项目中的2个”等。然后它应该消失,listview应该恢复正常

我尝试将标题视图附加到RecyclerView(并成功),我可以更新它的内容并隐藏它,但每当我隐藏它时,都会有一个空的空间,我无法使listview返回到其原始位置,我尝试了很多方法,我甚至将其设为空,重新构建它,并重新设置适配器。。。没什么帮助

所以我决定为RecyclerView.Adapter引入两种类型的项——TYPE\u头和TYPE\u产品
现在我正在实现这一点,但我突然想到,我不知道如何动态更新类型为_HEADER的项中的TextView(我正在使用一个从uploader服务接收消息的处理程序,但我不知道如何访问RecycleView.Adapter中的TYPE_头项,以便动态更改其TextView。

我正在使用RecycleView,我需要一个可以随listview向上滚动的头。我尝试了各种可能的解决方案,可以创建平滑效果,向上滚动时无额外空间

工作解决方案

我将标题作为listview的一部分。因此,您也可以做同样的事情,当您需要标题时,将其作为列表视图中位置0的一个项目,并从位置1开始实际的listview

当您不需要它时,只需删除位置0处的项目即可

这不会给你带来额外的空间或其他问题

此外,您还可以在RecycleAdapter中的bindView()中更新其中的Textview

已编辑

例如,您有一个广播接收器(或者,它可以是一个按钮点击或任何其他事件),它表示现在是时候更新HeaderView中的TextView了


在该接收器中,您实际上可以将全局标志设置为true,notifyDataSetChanged(),然后在RecycleAdapter.onBindViewHolder中,根据全局标志的值,您可以更新TextView。

因为您知道您只需要一个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
中的header视图。相反,让活动直接从适配器获取HeaderView


然后,您的活动可以直接从适配器获取
HeaderViewHolder
,并根据需要进行更新。

为什么要在ListView/RecyclerView中执行此操作?标题是列表中的第一项。如果您滚动了列表,此标题将不可见。使用
RelativeLayout
wi不是更简单吗将此“标题”作为顶部项目,然后根据进度简单地显示/隐藏它?或者我理解您的要求有误吗?我想我已经尝试过了(上次我做此工作是两个月前)但我不确定。我已经完全忘记了这个想法,我会尝试一下!谢谢!这个解决方案很有效,非常感谢!没问题。很高兴能提供帮助。你能详细说明一下这一部分吗->另外,你可以在bindView()中更新其中的Textview在RecycleAdapter中。如果列表已滚动,因此第一个可见位置不是0,则此操作将不起作用。如果您确实必须这样做,则还需要将列表滚动到顶部。这可能是一个糟糕的用户体验,也可能不是,但这取决于您自己。我个人决不会这样做。使用vi的
RelativeLayout
我会选择上面标有
layout_=“@+id/listview”
的ew,然后在需要时更改可见性。这样,列表就不必滚动。