Как скрыть нужный мне элемент с помощью метода getItemViewType(int)?
В моем приложении есть тест с карточками, и мне нужно сделать титульную карточку, после свайпа которой начнется тест и она должна исчезнуть - это я и не могу реализовать, а реализовать мне это нужно с помощью метода getItemViewType(int). Я создал CardFragment (Class), CardAdapter (Class), CardViewModel (Class), card_fragment (Layout, где находится RecyclerView), item_card (Layout итем, который помещается в RecyclerView и заполняется данными) и item_title_card (Layout итем, который должен отображаться изначально, после свайпа которого должен начаться тест с использованием выше упомянутого item_card) в item_card выгружаются все нужные данные(Пока что эти данные из личной базы данных(произвольные), но в будущем я буду их брать из базы данных SQLite).Я написал кое какой код(он неверный), а что делать дальше я просто без понятия. Кому не сложно, подскажите, что я делал не так и что я должен написать. Искал в интернете подобный код, но не нашел.
CardAdapter
class CardAdapter(var items: List<CardTutorialWordItem>, val callback: Callback) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder{
val inflater = LayoutInflater.from(parent.context)
return when(viewType){
TYPE_CARD -> CardViewHolder(inflater.inflate(R.layout.item_card, parent, false))
TYPE_TITLE -> TitleCardViewHolder(inflater.inflate(R.layout.item_card_title,parent, false))
else ->CardViewHolder(inflater.inflate(R.layout.item_card, parent, false))
}
}
override fun getItemCount() = items.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when(holder){
is CardViewHolder -> holder.bind(items[position] as CardTutorialWordItem.CardItem)
is TitleCardViewHolder -> holder.bind(items[position] as CardTutorialWordItem.TitleCardItem)
}
}
override fun getItemViewType(position: Int): Int {
return when(items[position]){
is CardTutorialWordItem.CardItem -> TYPE_CARD
is CardTutorialWordItem.TitleCardItem -> TYPE_TITLE
}
}
inner class CardTextViewHolder (itemView: View) : RecyclerView.ViewHolder(itemView) {
private val textCrdCrimeantatar = itemView.findViewById<TextView>(R.id.txt_crd_crimeantatar)
private val textCrdRussian = itemView.findViewById<TextView>(R.id.txt_crd_russian)
fun bind(item: WordStudyCard) {
textCrdCrimeantatar.text = item.crimeantatar
textCrdRussian.text = item.russian
itemView.setOnClickListener {
if (adapterPosition != RecyclerView.NO_POSITION) callback.onItemClicked(items[adapterPosition])
}
}
}
inner class CardViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView){
private val card = ItemView.findViewById<CardView>(R.id.crd_card)
fun bind (item: CardTutorialWordItem.CardItem){
itemView.setOnClickListener{
if(adapterPosition != RecyclerView.NO_POSITION) callback.onItemClicked(items[adapterPosition])
}
}
}
inner class TitleCardViewHolder (ItemView: View) : RecyclerView.ViewHolder(ItemView){
private val cardTitle = ItemView.findViewById<CardView>(R.id.crd_card_title)
fun bind (item: CardTutorialWordItem.TitleCardItem){
itemView.setOnClickListener{
if(adapterPosition != RecyclerView.NO_POSITION) callback.onItemClicked(items[adapterPosition])
}
}
}
interface Callback {
fun onItemClicked(item: CardTutorialWordItem)
}
companion object {
private const val TYPE_TITLE = 1
private const val TYPE_CARD = 2
}
}
CardFragment
class CardFragment : Fragment() {
val items = mutableListOf<WordStudyCard>()
val item = mutableListOf<CardTutorialWordItem>()
private fun cardDataPrepare() {
items.add(WordStudyCard("Some", "text"))
items.add(WordStudyCard("Some", "text"))
items.add(WordStudyCard("Some", "text"))
items.add(WordStudyCard("Some", "text"))
items.add(WordStudyCard("Some", "text"))
items.add(WordStudyCard("Some", "text"))
}
val cardAdapter = CardAdapter(item, object: CardAdapter.Callback {
override fun onItemClicked(item: CardTutorialWordItem) {
//TODO Сюда придёт элемент, по которому кликнули. Можно дальше с ним работать
}
})
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_card, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
PagerSnapHelper().attachToRecyclerView(cardRecycler)
val simpleItemTouchCallback: ItemTouchHelper.SimpleCallback =
object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP) {
override fun onMove(
cardRecycler: RecyclerView,
cardViewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
Toast.makeText(requireContext(), "on Move", Toast.LENGTH_SHORT).show();
return false
}
override fun onSwiped(cardViewHolder: RecyclerView.ViewHolder, direction: Int) {
Toast.makeText(requireContext(), "on Swiped ", Toast.LENGTH_SHORT).show()
val position = cardViewHolder.adapterPosition
items.removeAt(position)
cardAdapter.notifyDataSetChanged()
}
}
cardDataPrepare()
cardRecycler.adapter = cardAdapter
val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
itemTouchHelper.attachToRecyclerView(cardRecycler)
cardRecycler.layoutManager = LinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false)
}
}
item_card_title
<androidx.cardview.widget.CardView
android:id="@+id/crd_card_title"
android:layout_width="350dp"
android:layout_height="350dp"
android:layout_gravity="center_horizontal|center_vertical"
app:cardCornerRadius="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginBottom="60dp"
android:background="@color/colorAccent">
</ImageView>
<TextView
android:id="@+id/txt_crd_title"
android:layout_width="275dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:gravity="center"
android:text="Потяните карточку вверх, если вы запомнили слово, чтобы оно больше не повторялось."
android:textSize="19dp"
android:textStyle="bold"></TextView>
<TextView
android:id="@+id/txt_crd_russian"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginTop="65dp"
android:text="Начать"
android:textColor="@color/colorAccent"
android:textSize="30dp">
</TextView>
item_card
<androidx.cardview.widget.CardView
android:id="@+id/crd_card"
android:layout_width="350dp"
android:layout_height="350dp"
android:layout_gravity="center_horizontal|center_vertical"
app:cardCornerRadius="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/txt_crd_crimeantatar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginBottom="80dp"
android:text="Архивовведение"></TextView>
<TextView
android:id="@+id/txt_crd_russian"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginTop="80dp"
android:text="Архивовведение">
</TextView>
fragment_card
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/cardRecycler"
android:background="@color/white"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_alignParentBottom="true"
android:scrollbars="vertical"
app:spanCount="1"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:listitem="@layout/item_card"/>
Я просто не понимаю что мне делать. Если разъясните, то я буду очень благодарен.