RecyclerView не отображается при нажатии - PullRequest
0 голосов
/ 09 февраля 2020

Я вижу проблему с RecyclerView во фрагменте viewpager и использую нижнюю панель навигации. Когда я нажимаю на панели навигации, чтобы изменить экран, а затем нажимаю на кнопку «Назад», он go переходит к первому экрану, на котором есть пейджер, но окно повторного просмотра не появляется, и когда я вкладываю панель навигации для повторного выбора этого экрана, он появляется ,

В программе восстановления отображается список из базы данных пожарного магазина и с использованием ViewModel. Я пытаюсь установить для retainInstance значение true, но это не работает. И попробуйте настроить просмотрщик в onCreate и onCreateView, он тоже не работает.

Редактировать : это мой код. MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val navView: BottomNavigationView = findViewById(R.id.nav_view)

    val navController = findNavController(R.id.nav_host_fragment)
    navView.setupWithNavController(navController)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId){
        android.R.id.home -> {
            onBackPressed()
            return true
        }
    }
    return super.onOptionsItemSelected(item)
}
}

activity_main. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="@drawable/bg_nav"
        app:itemIconTint="@color/navbar_color"
        app:itemTextColor="@color/navbar_color"
        app:itemTextAppearanceActive="@style/navbar_font"
        app:itemTextAppearanceInactive="@style/navbar_font"
        app:itemBackground="@drawable/nav_ripple"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu"/>

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@id/nav_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />

</androidx.constraintlayout.widget.ConstraintLayout>

HomeFragement.kt (содержит tablayout и viewpager)

class HomeFragment : Fragment() {

    private lateinit var homeViewModel: HomeViewModel

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        homeViewModel =
            ViewModelProviders.of(this).get(HomeViewModel::class.java)
        val root = inflater.inflate(R.layout.fragment_home, container, false)
        return root
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        setupTab()
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    }

    private fun setupTab(){
        Log.d("SET UP TAB", "SETTING UP")
        val pageTabAdapter = PageTabAdapter(activity!!.supportFragmentManager, activity_tab.tabCount)
        view_activity.adapter = pageTabAdapter
        view_activity.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(activity_tab))

        activity_tab.setOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
            override fun onTabReselected(p0: TabLayout.Tab?) {

            }

            override fun onTabUnselected(p0: TabLayout.Tab?) {

            }

            override fun onTabSelected(p0: TabLayout.Tab?) {
                view_activity.currentItem = p0!!.position
            }

        })
    }
}

фрагмент_дома. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical">

        <TextView
            android:id="@+id/home_header"
           style="@style/page_header"
            android:text="@string/title_home"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        <Button
            android:id="@+id/calendar_btn"
            android:layout_width="60dp"
            android:layout_height="40dp"
            android:background="@drawable/btn_calendar"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@id/home_header"
            app:layout_constraintBottom_toBottomOf="@id/home_header"
            android:layout_marginEnd="10dp"/>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/activity_tab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabRippleColor="@color/colorPrimary"
        app:tabTextAppearance="@style/tab_font"
        app:tabIndicatorHeight="2.5dp"
        app:tabGravity="fill"
        app:layout_constraintTop_toBottomOf="@id/home_header"
        app:layout_constraintStart_toStartOf="parent"
        android:background="@android:color/white">

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="กิจกรรมในเดือนนี้" />

        <com.google.android.material.tabs.TabItem
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="กิจกรรมที่ผ่านไปแล้ว" />

    </com.google.android.material.tabs.TabLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_activity"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toBottomOf="@id/activity_tab"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

PageAdapter.kt

class PageTabAdapter(private val fragmentManager: FragmentManager, private val anInt: Int) :
    FragmentStatePagerAdapter(fragmentManager) {
    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> {
                NewActivity.newInstance()
            }
            1 -> {
                PastActivity.newInstance()
            }
            else -> {
                null!!
            }
        }
    }

    override fun getCount(): Int {
        return anInt
    }
}

ActivityAdapter.kt (это адаптер для повторного использования)

class ActivityAdapter(
    private val mContext: Context, private val mItems: List<ActivityModel>
): RecyclerView.Adapter<ActivityAdapter.Holder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
        val inflater = LayoutInflater.from(this.mContext)
        val view = inflater.inflate(R.layout.activity_list, parent, false)

        return Holder(view)
    }

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

    override fun onBindViewHolder(holder: Holder, position: Int) {
        val item = this.mItems[position]
        holder.setName(item.name)
        val date = item.date?.toDate()
        val dateFormat: DateFormat = SimpleDateFormat("dd-MMM-yyyy")
        val newDate = dateFormat.format(date).toString()
        holder.setDate(newDate)
        val period = item.start + " - " +item.end
        holder.setPeriod(period)
        holder.setButton(item)
    }

    inner class Holder(view: View): RecyclerView.ViewHolder(view){

        private var activityName: TextView = view.activity_list_name
        private var activityDate: TextView = view.activity_list_date
        private var activityPeriod: TextView = view.activity_list_period
        private var activityPicture: ImageView = view.activity_list_pic
        private var activityButton: Button = view.activity_list_btn

        fun setName(name: String?){
            this.activityName.text = name
        }

        fun setDate(date: String?){
            this.activityDate.text = date
        }

        fun setPeriod(period: String?){
            this.activityPeriod.text = period
        }

        fun setPicture(picpath: String?){

        }

        fun setButton(data: ActivityModel){

            }
        }
    }
}

PS: я использую Kotlin в моем проекте Спасибо

...