我有一个带有线性布局管理器的回收 View ,它包含不同的项目。 其中一个项目有一个按钮,可以隐藏或显示该项目的嵌套布局。
所以我添加了大约 10 行的特定类型,当我单击特定项目时,会显示它的嵌套布局,但我看到另一个项目显示它自己的嵌套布局。 第二次尝试是点击某个按钮并滚动,嵌套布局显示在不同的项目上。
正如您从代码中看到的那样,我尝试调用方法 - notifyDataSetChanged(),但它没有帮助。 我知道有扩展的回收器 View ,但就我而言,我想在不更改整个代码的情况下解决它。
布局:
<RelativeLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
>
<TextView
android:id = "@+id/tv"
android:layout_height="wrap_content"
android:layout_width = "wrap_content"
android:text = "click on the button"
/>
<Button
android:id = "@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me"
android:layout_toRightOf="@+id/tv"
/>
<RelativeLayout
android:id = "@+id/nested"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv"
android:visibility="gone"
>
<TextView
android:id = "@+id/tv1"
android:layout_height="wrap_content"
android:layout_width = "wrap_content"
android:text = "click on the button"
/>
</RelativeLayout>
</RelativeLayout>
适配器中的代码(onBind)
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position)
{
int type = getItemViewType(position);
ViewType viewType = ViewType.values()[type];
try
{
switch (viewType)
{
case VIEW1:
// code for view 1
break;
case VIEW2:
final ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.tv.setText("TV1");
viewHolder.btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
viewHolder.nestedLayout.setVisibility(!isVisible ? View.VISIBLE : View.GONE );
viewHolder.isVisible = !viewHolder.isVisible;
// notifyDataSetChanged();
}
});
break;
}
}
catch (Exception e)
{
e.printStackTrace();
Log.d("ChatListAdapter","chat list adapter ioexception" + e.getMessage());
}
}
最佳答案
正如 Samuel Robert 所指出的,您需要跟踪模型类中扩展项的可见性:
假设您正在使用模型类项,其中有一个字段来跟踪嵌套布局的可见性。
试试这个:
Item item = itemList.get(position);
final ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.tv.setText("TV1");
viewHolder.nestedLayout.setVisibility(!item.isVisible ? View.VISIBLE : View.GONE );
viewHolder.btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
int position = getAdapterPosition();
if( position != RecyclerView.NO_POSITION ) {
Item item = itemList.get(position)
item.isVisible = !item.isVisible;
notifyItemChanged(position);
}
}
});
关于Android RecyclerView - 滚动更改项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40018690/