Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在RecyclerView中启用下一项?_Java_Android_Kotlin_Android Recyclerview - Fatal编程技术网

Java 如何在RecyclerView中启用下一项?

Java 如何在RecyclerView中启用下一项?,java,android,kotlin,android-recyclerview,Java,Android,Kotlin,Android Recyclerview,我希望可以单击RecyclerView中的下一项。例如,如果项目1的得分>10,则可以单击项目2,但项目3、4、5、6。。。无法单击。如果项目2的scrore>10,则可以单击项目3,但项目4、5、6、7。。。无法单击。如果项目3得分>10,则可以单击项目4,但项目5、6、7、8。。。无法单击 类回收视图 class MathCategoryDetailActivity : AppCompatActivity() { private var progressBar: ProgressBar?

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

类回收视图

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
}


}
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)

    }

}

}
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
}


}
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)

    }

}

}
共同点1

 object Common1 {
        var selectedCategoryIdDetail: MathCategoryDetail? = null
    }

我试过很多方法,但都不管用。请帮助我

尝试在适配器内创建一个方法,以启用/禁用项目。 例如:

fun toggleEnabled(enabled: Boolean){
   //enable or disable the items according to the score
}
使用RxJava或LiveData观察分数。每次更改分数时,它都会检查并触发
toggleEnabled()


p、 您可以按位置获取项目(例如,如果分数在10到20之间,您将从适配器获取索引为1的项目,并为该项目调用
toggleEnabled()

我无法重新创建该项目,但我明白您的意思。你能得到总价值指数吗?这与(x在0中直到totalIndex){if(x>10){x+1=enabled}else{x+1=disabled}类似。抱歉,这不是确切的代码。您甚至可以在onClick方法中进行检查,获取当前单击的项,并查看项的highScope是否大于10,如果不大于10,则不要调用
IonRecycleWebItemClickListener2.onClick(视图、适配器位置)