簡體   English   中英

如何在 RecyclerView 中啟用下一項?

[英]How to enable next item in RecyclerView?

我希望可以單擊 RecyclerView 中的下一項。 例如,如果第 1 項的得分 > 10,則可以單擊第 2 項,但無法單擊第 3、4、5、6 項...。 如果第 2 項的分數 > 10,則可以單擊第 3 項,但無法單擊第 4、5、6、7 項...。 如果第 3 項的得分 > 10,則可以單擊第 4 項,但無法單擊第 5、6、7、8 項...。

在此處輸入圖像描述 class 回收商查看

class MathCategoryDetailActivity : AppCompatActivity() {

private var progressBar: ProgressBar? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_math_category_detail)

    progressBar = findViewById(R.id.progressBar)


    recycler_math_category_detail.layoutManager = GridLayoutManager(this, 2)
    recycler_math_category_detail.setHasFixedSize(true)

    val adapter = MathCategoryDetailAdapter(
        this,
        DBHelperOther.getInstance(this).allCategoryDetail(Common.selectedCategory!!.id)
    )

    Common.selectedCategory!!.id
    recycler_math_category_detail.addItemDecoration(
        SplacesItemDecoration(
            4
        )
    )

    recycler_math_category_detail.adapter = adapter
}


}

RecyclerView的適配器

class MathCategorySpecifyDetailAdapter(
    internal var context: Context,
    internal var categoryDetailList: List<MathCategorySpecifyDetail>) :

RecyclerView.Adapter<MathCategorySpecifyDetailAdapter.MyViewHolder1>() {
private var dialog: Dialog? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder1 {
    val itemView =
        LayoutInflater.from(context).inflate(R.layout.activity_math_category_specify_detail_adapter, parent, false)

    return MyViewHolder1(itemView)
}

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

override fun onBindViewHolder(holder: MyViewHolder1, position: Int) {
    holder.card_category_detail_2.isEnabled = false
    holder.txt_category_specify_detail_2_name.isEnabled = false

     //if(the id =1 , item can be clicked)
    if(categoryDetailList[position].id == 1) {
        holder.card_category_detail_2.isEnabled = true
        holder.txt_category_specify_detail_2_name.isEnabled = true
        if(categoryDetailList[position].highScore> 10) {

             //I added code here, but it doens't work
            categoryDetailList[position].id++
            holder.card_category_detail_2.isEnabled = true
        }
    }

    holder.txt_category_specify_detail_2_name.text = categoryDetailList[position].name
    holder.score.text = categoryDetailList[position].highScore.toString()

    dialog = Dialog(context)
    dialog!!.setContentView(R.layout.activity_lesson)

    holder.card_category_detail_2.setOnClickListener {

        var txtLesson: TextView = dialog!!.findViewById(R.id.txtLesson)
        txtLesson.text = categoryDetailList[position].lesson

        var txtDescribe: TextView = dialog!!.findViewById(R.id.txtDescribe)
        txtDescribe.text = categoryDetailList[position].nameOfTypeDetail

        var txtType: TextView = dialog!!.findViewById(R.id.txtType)
        txtType.text = categoryDetailList[position].mathCategoryDetail

        var btnPlay: Button =dialog!!.findViewById(R.id.btnPlay)

        btnPlay.setOnClickListener{
            Common2.selectedCategoryId = categoryDetailList[position]
            val intent = Intent(context, QuestionActivity::class.java)
            context.startActivity(intent)

        }

        var window : Window? = dialog!!.window
        window!!.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)
        dialog!!.show()

    }

}

inner class MyViewHolder1(itemView: View) : RecyclerView.ViewHolder(itemView),
    View.OnClickListener {

    internal val txt_category_specify_detail_2_name: TextView
    internal val score: TextView
    internal val card_category_detail_2: CardView
    internal lateinit var iOnRecyclerViewItemClickListener2: IOnRecyclerViewItemClickListener2

    fun setiOnRecyclerViewItemClickListener2(iOnRecyclerViewItemClickListener2: IOnRecyclerViewItemClickListener2) {
        this.iOnRecyclerViewItemClickListener2 = iOnRecyclerViewItemClickListener2

    }

    init {
        txt_category_specify_detail_2_name =
            itemView.findViewById(R.id.txt_category_specify_detail_2_name) as TextView
        score = itemView.findViewById(R.id.score) as TextView
        card_category_detail_2 = itemView.findViewById(R.id.card_category_detail_2) as CardView

        itemView.setOnClickListener(this)
    }

    override fun onClick(view: View) {
        iOnRecyclerViewItemClickListener2.onClick(view, adapterPosition)

    }

}

}

數學類別指定詳細信息

class MathCategorySpecifyDetail(
    var id: Int,
    var idMathCategoryDetail: Int,
    var name: String,
    var lesson: String,
    var nameOfTypeDetail: String,
    var mathCategoryDetail: String,
    var highScore: Int
)

常見1

 object Common1 {
        var selectedCategoryIdDetail: MathCategoryDetail? = null
    }

我已經嘗試了很多方法,但它不起作用。 請幫我

嘗試在適配器內創建一個啟用/禁用項目的方法。 例如:

fun toggleEnabled(enabled: Boolean){
   //enable or disable the items according to the score
}

使用 RxJava 或 LiveData 來觀察分數。 每次更改分數時,它都會檢查並觸發toggleEnabled()

ps 您可以通過 position 獲取項目(如果分數在 10 到 20 之間,您將從適配器獲取索引為 1 的項目並為該項目調用toggleEnabled() 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM