viewpager2 имеет ошибку при скольжении в android - PullRequest
0 голосов
/ 19 апреля 2020

Я использую viewpager2 вместо фрагмента. Я сделал пять просмотров на адаптере viewpager2. нет проблем при скольжении по пальцу. Но когда я скользю по коду, возникает проблема. На первой и второй страницах нет скользящей анимации. после 2 страниц я вижу скользящую анимацию. есть ли у кого эта проблема? Я попробовал этот код. Когда я нажимаю следующую кнопку, просто вызываю этот метод.

    private fun moveNextPage(){
        binding.registerViewpager.setCurrentItem(binding.registerViewpager.currentItem+1,true)
    }

Адаптер

   val mContext = context
    val mRegisterList : List<RegisterData> = registerList
    val mOnClickListener  = onClickListener
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

        var view : View ?=null
        when(viewType) {
            REGISTER_NICKNAME -> {
                view = LayoutInflater.from(mContext).inflate(R.layout.fragment_register_nickname, parent, false)
                return RegisterNickNameViewHolder(view)
            }
            REGISTER_BIRTHDAY->{
                view = LayoutInflater.from(mContext).inflate(R.layout.fragment_register_birthyear, parent, false)
                return RegisterBirthYearViewHolder(view)
            }
            REGISTER_GENDER->{
                view = LayoutInflater.from(mContext).inflate(R.layout.fragment_register_gender, parent, false)
                return RegisterGenderViewHolder(view)
            }
            REGISTER_HOMETOWN->{
                view = LayoutInflater.from(mContext).inflate(R.layout.fragment_register_hometown, parent, false)
                return RegisterHomeTownViewHolder(view)
            }
            REGISTER_PICTURE->{
                view = LayoutInflater.from(mContext).inflate(R.layout.fragment_register_picture, parent, false)
                return RegisterPictureViewHolder(view)
            }

        }
        return RegisterNickNameViewHolder(view!!)
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        when(holder){

            is RegisterNickNameViewHolder ->{
                holder.registerTitle.text = mRegisterList[position].title
                holder.registerDescription.text = mRegisterList[position].subtitle
            }

            is RegisterBirthYearViewHolder->{
                holder.registerTitle.text = mRegisterList[position].title
                holder.registerDescription.text = mRegisterList[position].subtitle
            }

            is RegisterGenderViewHolder->{
                holder.registerTitle.text = mRegisterList[position].title
                holder.registerDescription.text = mRegisterList[position].subtitle
            }
            is RegisterHomeTownViewHolder->{
                holder.registerTitle.text = mRegisterList[position].title
                holder.registerDescription.text = mRegisterList[position].subtitle
            }
            is RegisterPictureViewHolder->{
                holder.registerTitle.text = mRegisterList[position].title
                holder.registerDescription.text = mRegisterList[position].subtitle
            }
        }
    }



    inner class RegisterNickNameViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
        val registerTitle :TextView =itemView.findViewById(R.id.register_title)
        val registerDescription :TextView =itemView.findViewById(R.id.register_description)
        val registerNickName :EditText = itemView.findViewById(R.id.register_nickname)
    }


    inner class RegisterBirthYearViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
        val registerTitle :TextView =itemView.findViewById(R.id.register_title)
        val registerDescription :TextView =itemView.findViewById(R.id.register_description)
        val registerBirthYear : Spinner = itemView.findViewById(R.id.register_birthyear)

        init{
            registerBirthYear.onItemSelectedListener = object : OnItemSelectedListener {
                override fun onItemSelected(parent: AdapterView<*>?, view: View,
                    position: Int, id: Long) {
                    mOnClickListener.selectBirthYear(registerBirthYear.selectedItem.toString())
                }
                override fun onNothingSelected(parent: AdapterView<*>?) {

                }
            }
        }
    }


    inner class RegisterGenderViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
        val registerTitle :TextView =itemView.findViewById(R.id.register_title)
        val registerDescription :TextView =itemView.findViewById(R.id.register_description)
        val registerMaleImage : ImageView = itemView.findViewById(R.id.male_image)
        val registerFemaleImage : ImageView = itemView.findViewById(R.id.female_image)
        val registerFemaleLayout : LinearLayout = itemView.findViewById(R.id.female_layout)
        val registerMaleLayout : LinearLayout = itemView.findViewById(R.id.male_layout)

        init {

            registerMaleImage.run {
                clipToOutline = true
                setImage(mContext,drawableToUri(mContext,"gender_female"),registerFemaleImage)
                setOnClickListener {
                    mOnClickListener.selectGender(MALE)
                    registerMaleImage.setImageURI(drawableToUri(mContext,"gender_male_clicked"))
                    registerFemaleImage.setImageURI(drawableToUri(mContext,"gender_female_unclicked"))
                }
            }

            registerFemaleImage.run{
                clipToOutline = true
                setImage(mContext,drawableToUri(mContext,"gender_male"),registerMaleImage)
                setOnClickListener {
                    mOnClickListener.selectGender(FEMALE)
                    registerFemaleImage.setImageURI(drawableToUri(mContext,"gender_female_clicked"))
                    registerMaleImage.setImageURI(drawableToUri(mContext,"gender_male_unclicked"))
                }
            }
        }
    }

    inner class RegisterHomeTownViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
        val registerTitle :TextView =itemView.findViewById(R.id.register_title)
        val registerDescription :TextView =itemView.findViewById(R.id.register_description)
        val registerHomeTown : Spinner = itemView.findViewById(R.id.register_hometown)

        init{
            registerHomeTown.onItemSelectedListener = object : OnItemSelectedListener {
                override fun onItemSelected(parent: AdapterView<*>?, view: View,
                                            position: Int, id: Long) {
                    mOnClickListener.selectHomeTown(registerHomeTown.selectedItem.toString())
                }
                override fun onNothingSelected(parent: AdapterView<*>?) {
                }
            }
        }
    }

    inner class RegisterPictureViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView){
        val registerTitle :TextView =itemView.findViewById(R.id.register_title)
        val registerDescription :TextView =itemView.findViewById(R.id.register_description)
        val registerPicture : ImageView = itemView.findViewById(R.id.picture_image)

        init{
            registerPicture.run{
                clipToOutline=true
                setOnClickListener {
                    mOnClickListener.selectPicture()
                }
            }
        }
    }

    override fun getItemCount(): Int = mRegisterList.size

    override fun getItemViewType(position: Int): Int {
        return mRegisterList[position].viewType
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...