Что не так с этим простым назначением вар в Kotlin? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть этот класс адаптера RecyclerView, в котором есть метод offsetRound.

class LeagueRoundAdapter(private val rounds: List<RoundVO>) : RecyclerView.Adapter<MatchViewHolder>() {
    private var round: Int = 0
        set(value) {
            matches = rounds[value].matches

            notifyDataSetChanged()
        }


    fun offsetRound(offset: Int): Int {
        var newround = round + offset;
        if (newround !in 0 until rounds.size) {
            return round
        }
        round = newround
        return newround
    }

    private var matches = rounds[round].matches


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MatchViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_match, parent, false)
        return MatchViewHolder(view)
    }

    override fun getItemCount(): Int {
        return rounds[round].matches.size
    }


    override fun onBindViewHolder(holder: MatchViewHolder, position: Int) {
        val matchVO = matches[position]
        holder.bind(matchVO)
    }
}

Когда я нажимаю кнопку «предыдущий / следующий», я хочу увеличить / уменьшить текущий раунд:

private fun setupEvents(){
    btn_next_round.setOnClickListener{
        val round = getAdapter().offsetRound(Integer.parseInt(btn_next_round.tag as String))
        txt_round_info.text = "$round"
    }

    btn_prev_round.setOnClickListener{
        val round = getAdapter().offsetRound(Integer.parseInt(btn_prev_round.tag as String))
        txt_round_info.text = "$round"
    }
}

теги кнопки «1» и «-1».

Проблема в том, что в этой строке round = newround переменная round не принимает значение newround, как вы можете видеть вэтот отладочный отпечаток:

До назначения:

enter image description here

После:

enter image description here

Я сейчас немного сонный.Я делаю что-то глупое, что я не могу понять?

РЕДАКТИРОВАТЬ

Я поставил журнал до и после:

println("1. round: $round newround: $newround")
round = newround
println("2. round: $round newround: $newround")
println("----")

Нажав кнопку несколько раз:

2018-12-18 23:08:11.830 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 1. round: 0 newround: 1
2018-12-18 23:08:11.830 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 2. round: 0 newround: 1
2018-12-18 23:08:11.830 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: ----
2018-12-18 23:08:11.856 3349-3354/com.github.alexpfx.soccerchampionship I/zygote64: Do full code cache collection, code=504KB, data=333KB
2018-12-18 23:08:11.857 3349-3354/com.github.alexpfx.soccerchampionship I/zygote64: After code cache collection, code=496KB, data=281KB
2018-12-18 23:08:14.910 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 1. round: 0 newround: 1
2018-12-18 23:08:14.911 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 2. round: 0 newround: 1
2018-12-18 23:08:14.911 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: ----
2018-12-18 23:08:15.661 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 1. round: 0 newround: 1
2018-12-18 23:08:15.661 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 2. round: 0 newround: 1
2018-12-18 23:08:15.661 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: ----
2018-12-18 23:08:16.422 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 1. round: 0 newround: 1
2018-12-18 23:08:16.422 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: 2. round: 0 newround: 1
2018-12-18 23:08:16.423 3349-3349/com.github.alexpfx.soccerchampionship I/System.out: ----

1 Ответ

0 голосов
/ 19 декабря 2018

Я вижу, вы set определены для round:

private var round: Int = 0
    set(value) {
        matches = rounds[value].matches

        notifyDataSetChanged()
    }

Но вы забыли на самом деле обновить значение поля поддержки .Сеттер должен выглядеть так:

private var round: Int = 0
    set(value) {
        field = value // Note this line
        matches = rounds[value].matches

        notifyDataSetChanged()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...