Скрыть и показать элемент, когда пользователь нажимает на него с помощью адаптера - PullRequest
0 голосов
/ 22 сентября 2018

Мой список содержит вопросы и ответы.

Я разработал элемент, в котором есть вопрос и ответ, и я планирую скрыть и показать ответ, а не весь элемент (Унесенные / видимые), когда пользователь нажимает на вопрос.Так что это будет больше похоже на расширяемый способ.

Теперь это мой адаптер:

class FaqExpandableAdapter internal constructor(private val context: Context, private var items: List<Faq>,private val callBack: AdapterCallBack?) : RecyclerView.Adapter<FaqExpandableAdapter.MyViewHolder>() {

    private val inflater: LayoutInflater = LayoutInflater.from(context)


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = inflater.inflate(R.layout.item_question_faq, parent, false)
        return MyViewHolder(view)
    }


    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.txtQuestionFaq.text = items[position].question?.toString() ?: "-"
        holder.txtAnswerFaq.text = items[position].answer?.toString() ?: "-"
    }


    override fun getItemCount(): Int {
        return items.size
    }

    fun update(items: List<Faq>) {
        this.items = items
        notifyDataSetChanged()
    }

    inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        @BindView(R.id.txtQuestionFaq)
        lateinit var txtQuestionFaq: AppCompatTextView
        @BindView(R.id.txtAnswerFaq)
        lateinit var txtAnswerFaq: AppCompatTextView

        init {
            ButterKnife.bind(this, itemView)
        }


        @OnClick(R.id.relativeRowFaq)
        fun onItemClicked() {
            callBack?.onItemClicked(adapterPosition)
        }

    }


    interface AdapterCallBack {
        fun onItemClicked(position: Int)
    }

}

Мой последний шаг - где выполнить действие видимости?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Котлин: Напишите метод onClick в вашей функции onBindViewHolder.

holder.txtQuestionFaq.setOnClickListener {
        holder.txtAnswerFaq.visibility = View.VISIBLE;
    }
0 голосов
/ 22 сентября 2018

В методе onBindViewHolder() добавьте следующие строки: (Я использую Java)

holder.txtQuestionFaq.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        holder.txtAnswerFaq.setVisibility(View.VISIBLE);
    }
});
...