私はリニアレイアウトマネージャーを備えたrecyclerviewを持っていて、それは異なるアイテムを含んでいます。 アイテムの1つに、このアイテムのネストされたレイアウトを非表示または表示するボタンがあります。Android RecyclerView - スクロールの変更アイテム
特定のタイプの10行のようなものを追加し、特定のアイテムをクリックするとそのネストされたレイアウトが表示されますが、別のアイテムがそれ自身のネストされたレイアウトを表示することがわかります。 2回目の試行では、いくつかのボタンをクリックしてスクロールすると、ネストされたレイアウトが別のアイテムに表示されました。
コードからわかるように、私はnotifyDataSetChanged()メソッドを呼び出そうとしましたが、それは役に立ちません。 私はリサイクルの図が展開されていることを知っているが、私の場合は、変更コード全体せずに、それを解決したい。..
レイアウト:
<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());
}
}
があなたの活動上、またはその断片でこのRecyclerViewですか? –
@SamuelRobert、アクティビティ – Elior
データモデルは、操作したいビューの可視性のステータスを保持する必要があります。それ以外の場合は、スクロールするときにそれを緩和します。 –