当用户使用适配器单击项目时隐藏和显示项目
Hide and show item when the user click on it using adapter
我的清单是关于问题和答案的。
我设计了一个包含问题和答案的项目,我打算在用户单击问题时隐藏和显示答案,而不是整个项目 (GONE/VISIBLE)。所以它会更像是可扩展的方式。
现在这是我的适配器:
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)
}
}
我的最后一步是在哪里执行可见性操作?
在onBindViewHolder()
方法中,添加以下行:(我使用Java)
holder.txtQuestionFaq.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.txtAnswerFaq.setVisibility(View.VISIBLE);
}
});
Kotlin : 在您的 onBindViewHolder 函数上编写 onClick 方法。
holder.txtQuestionFaq.setOnClickListener {
holder.txtAnswerFaq.visibility = View.VISIBLE;
}
我的清单是关于问题和答案的。
我设计了一个包含问题和答案的项目,我打算在用户单击问题时隐藏和显示答案,而不是整个项目 (GONE/VISIBLE)。所以它会更像是可扩展的方式。
现在这是我的适配器:
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)
}
}
我的最后一步是在哪里执行可见性操作?
在onBindViewHolder()
方法中,添加以下行:(我使用Java)
holder.txtQuestionFaq.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.txtAnswerFaq.setVisibility(View.VISIBLE);
}
});
Kotlin : 在您的 onBindViewHolder 函数上编写 onClick 方法。
holder.txtQuestionFaq.setOnClickListener {
holder.txtAnswerFaq.visibility = View.VISIBLE;
}