Я получаю список чисел в адаптере RecyclerView в Android и показываю элементы в течение нескольких секунд и после того, как хочу их скрыть, и показываю снова, когда пользователь нажимает на них.
Первыйтот, который, когда я, когда скрываю, TextView не показывает фон, и я не знаю, почему.И после того, как я хочу, чтобы при щелчке пользователя и правильности текстовое представление всегда было видно, а неправильное исчезло.
Это мой адаптер
class CardAdapter(private val cards: List<Int>, val listener: CardAdapterOnClickHandler) : RecyclerView.Adapter<CardAdapter.CardAdapterViewHolder>() {
internal val handler = Handler()
override fun getItemCount(): Int {
return cards.size
}
interface CardAdapterOnClickHandler {
fun onCardClick(card: Int)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardAdapterViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.card, parent, false)
return CardAdapterViewHolder(view)
}
override fun onBindViewHolder(holder: CardAdapterViewHolder, position: Int) {
handler.postDelayed({
holder.itemView.card_number.visibility = View.GONE
holder.itemView.viewBackground.visibility = View.VISIBLE
}, 3000)
holder.bindGoal(position)
}
inner class CardAdapterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
fun bindGoal(position: Int) {
val card = cards[position]
itemView.apply {
card_number.text = card.toString()
viewBackground.visibility = View.VISIBLE
}
itemView.setOnClickListener(this)
}
override fun onClick(v: View) {
listener.onCardClick(cards[position])
}
}
}
Мой фрагмент
class GameFragment : Fragment(), CardAdapter.CardAdapterOnClickHandler {
private lateinit var randomList: List<Int>
private var cardNumber: Int = DEFAULT_NUMBER
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments.let {
cardNumber = it!!.getString(ARG_CARDS_NUMBERS).toInt()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.game_fragment, container, false)
val lv = rootView.findViewById(R.id.recyclerview_main_data) as RecyclerView
lv.layoutManager = GridLayoutManager(activity!!.applicationContext, DEFAULT_GRID_NUMBER)
randomList = List(cardNumber!!) { Random.nextInt(MIN_NUMBER, MAX_NUMBER) }
lv.adapter = CardAdapter(randomList, this)
return rootView
}
override fun onCardClick(card: Int) {
val sorted = randomList.sorted()
if (sorted.first() == card) {
randomList = randomList.toMutableList().apply { remove(card) }
//card_number.visibility = View.VISIBLE
Toast.makeText(activity!!.applicationContext, resources.getString(R.string.correct_game), Toast.LENGTH_SHORT).show()
if (randomList.isEmpty()) {
Toast.makeText(activity!!.applicationContext, resources.getString(R.string.win_game), Toast.LENGTH_SHORT).show()
val newFragment = StartFragment.newInstance()
activity!!.supportFragmentManager.beginTransaction().replace(R.id.container, newFragment).commit()
}
} else {
//card_number.visibility = View.GONE
Toast.makeText(activity!!.applicationContext, resources.getString(R.string.try_again), Toast.LENGTH_SHORT).show()
}
}
companion object {
private const val ARG_CARDS_NUMBERS = "cards_number"
private const val MIN_NUMBER = 1
private const val MAX_NUMBER = 100
private const val DEFAULT_NUMBER = 4
private const val DEFAULT_GRID_NUMBER = 2
fun newInstance(numberCards: String): GameFragment {
val fragment = GameFragment()
val args = Bundle()
args.putString(ARG_CARDS_NUMBERS, numberCards)
fragment.arguments = args
return fragment
}
}
}
И расположение элемента списка
[<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/minimum_margin"
android:layout_marginTop="@dimen/minimum_margin"
android:orientation="vertical">
<ImageView
android:id="@+id/viewBackground"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginEnd="@dimen/minimum_margin"
android:layout_marginStart="@dimen/minimum_margin"
android:layout_marginTop="@dimen/minimum_margin"
android:src="@drawable/rectangle"
android:tint="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@+id/card_number"
style="@style/Base.TextAppearance.AppCompat.Display1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/number_card"
android:visibility="visible"/>
</android.support.constraint.ConstraintLayout>
И несколько примеров на изображениях
https://i.stack.imgur.com/2mTjJ.png
https://i.stack.imgur.com/mmzp7.png
Где видно, что на втором изображении появляются только два элемента и должны быть четыре элемента