如何在RecyclerView中启用下一个项目?

问题描述 投票:0回答:1

我希望可以在RecyclerView中单击下一个项目。例如,如果项目1的得分> 10,则可以单击项目2,但不能单击项目3、4、5、6...。如果项目2的scrore> 10,则可以单击项目3,但不能单击项目4,5,6,7...。如果项目3的得分> 10,则可以单击项目4,但是不能单击项目5,6,7,8...。

enter image description here类RecyclerView

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)

    }

}

}

MathCategorySpecifyDetail

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

Common1

 object Common1 {
        var selectedCategoryIdDetail: MathCategoryDetail? = null
    }

我已经尝试了很多方法,但是没有用。请帮助我

java android kotlin android-recyclerview recycler-adapter
1个回答
0
投票

尝试创建将启用/禁用项目的方法。例如:

fun setScore(score:Int){
   //enable or disable the items according to the score here
}

使用RxJava或LiveData观察分数。每当乐谱改变时,它将检查并触发setScore()

© www.soinside.com 2019 - 2024. All rights reserved.