Элементы списка Android управляют просмотром - PullRequest
0 голосов
/ 17 марта 2019

Я получаю список чисел в адаптере 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

Где видно, что на втором изображении появляются только два элемента и должны быть четыре элемента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...