2017-10-04 91 views
1

如何更改RecyclerView中的行中的特定视图。 Adapter.notifyDataSetChangedAdapter.notifyItemChanged更新行。但我需要更改行中的特定视图,而不触及此行中的其他视图。在回收站视图中更改行中的特定项目

+1

查看是的是?对不起,我ddnt得到的问题,你要改变行的标签,按钮颜色或整个行样式..?或者你想将整行视图更改为另一个布局xml? –

+0

你好Vishnu KR! 我有两个imageViews和两个textViews。每次用户点击行时,我都希望每一行中的textVIews都改变它的文本。但问题是另一个imageView通过Picasso库获取它的源代码。每当我通过notifyDataSetChanged或其他方式更改文本时,毕加索都会更新imageView,并且它对用户是可见的。我想防止这种情况发生,所以问题是:如何更改行的特定视图,而不触及整行 –

+0

哈......你说当时毕加索重新加载图像。所以我认为你需要使用图像缓存技术。因此,如果毕加索已经加载,毕加索将不会再次加载图像。或者下一个选项是通过在项目模型中使用标签来显示并隐藏图像 –

回答

0

首先,使用Glide(通过谷歌),而不是毕加索。它更高效。其次,如果你的设备已经存在于你的高速缓冲存储器中,它不会再下载相同的图像。

现在, 只需更改列表中的数据,然后更新适配器或回收站视图。

里面你AdapterClass

创建一个接口,让我们说

public interface TheUpdater{ 
    public void updateMyAdapter(int position); 
} 

然后实现在您的活动这个接口,并重写此方法。

现在,为了获得视图的位置。

您可以覆盖视图(按钮甚至整个父视图即布局)的onClick()并执行以下语句。

mTappedPosition = getAdapterPosition(); 

listener.updateMyAdapter(mTappedPosition); //Update the adapter 

其中mTappedPosition是您的全局变量。

内,您的活动

@Override 
updateMyAdapter(int position){ 
---- //Do stuff 
mAdapter.notifyItemSetChanged(position); 
} 
+0

我知道,但问题是,我有ImageView,通过毕加索下载源,并且每次我设置notifyDatasetChanged毕加索download图片和此更新对用户可见,我想阻止该问题 –

+0

您能够获取适配器内视图的位置吗?如果是的话,那么我确实有一个解决方案。 – Dennis

+0

是的,当我进行更改时,我可以获得位置 –

0

你可以用下面的代码

MyRecyclerAdapter.ViewHolder viewHolder= (MyRecyclerAdapter.ViewHolder) recycleView.findViewHolderForAdapterPosition(1); 
    viewHolder.txtView.SetText("Some Text"); 
+0

正如我前面提到的,它并没有帮助 –

+0

请尝试更新代码 – Manish

+0

好吧,只是一个时刻 –

0

我想避免图像加载问题,你必须使用图像的缓存技术。这样已经加载的图像将不会再次加载。

如果图像已经加载和每行显示同一图像设置,那么你可以保持一个布尔标志,以您的itemModel(具有适配器项目的数据的DTO)。并更改该型号,然后致电

yourListToAdapter(index).setFlag(showImage1); // showImage1 boolean flag 

yourAdapter.notifyItemChanged(index); 
相关问题