代码之家  ›  专栏  ›  技术社区  ›  raginggoat

使用ViewPager FragmentTransaction进行表格布局

  •  0
  • raginggoat  · 技术社区  · 4 年前

    我有一张带寻呼机的表格。我的ViewPager中的片段包含一个RecyclerView,我试图在进行选择时显示一个新片段。它似乎正在创建新的片段,但我没有看到它。我做错了什么?

    activity_tabs.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="@drawable/background_gradient">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/transparent"
                app:popupTheme="@style/AppTheme.PopupOverlay" />
    
            <com.google.android.material.tabs.TabLayout
                android:id="@+id/tabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@id/toolbar"
                android:elevation="6dp"
                android:foregroundTint="@color/white"
                app:tabTextColor="@color/white"
                app:tabIconTint="@color/white"
                app:tabIndicatorColor="@color/white">
            </com.google.android.material.tabs.TabLayout>
    
            <androidx.viewpager.widget.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/tabLayout">
            </androidx.viewpager.widget.ViewPager>
    
        </RelativeLayout>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    class TabActivity: AppCompatActivity() {
    
        lateinit var tabLayout: TabLayout
        private var tabIcons = intArrayOf(
                R.drawable.collections_icon,
                R.drawable.user_icon,
                R.drawable.settings_icon
            )
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_tabs)
            setSupportActionBar(findViewById(R.id.toolbar))
            supportActionBar?.title = null
            supportActionBar?.setDisplayHomeAsUpEnabled(false)
    
            tabLayout = findViewById<TabLayout>(R.id.tabLayout)
            tabLayout.addTab(tabLayout.newTab().setText(""))
            tabLayout.addTab(tabLayout.newTab().setText(""))
            tabLayout.addTab(tabLayout.newTab().setText(""))
            tabLayout.tabGravity = TabLayout.GRAVITY_FILL
    
            var viewPager = findViewById<ViewPager>(R.id.viewPager)
            var pagerAdapter = PagerAdapter(supportFragmentManager, tabLayout.tabCount)
            viewPager.adapter = pagerAdapter
    
            tabLayout.setupWithViewPager(viewPager)
            setupTabs()
        }
    
        private fun setupTabs() {
            tabLayout.getTabAt(0)?.setIcon(tabIcons[0])?.setText("Collections")
            tabLayout.getTabAt(1)?.setIcon(tabIcons[1])?.setText("Account")
            tabLayout.getTabAt(2)?.setIcon(tabIcons[2])?.setText("Settings")
        }
    }
    

    PagerAdapter.kt

    class PagerAdapter(fragmentManager: FragmentManager, private val numOfTabs: Int): FragmentStatePagerAdapter(fragmentManager) {
        override fun getItem(position: Int): Fragment {
            if (position == 0) {
                println("TAB 1")
                var tabOne = CollectionsFragment()
                return tabOne
            } else if (position == 1) {
                println("TAB 2")
                var tabTwo = CollectionsFragment()
                return tabTwo
            } else {
                println("TAB 3")
                var tabThree = CollectionsFragment()
                return tabThree
            }
        }
    
        override fun getCount(): Int {
            return numOfTabs
        }
    }
    

    CollectionsFragment.kt

    class CollectionsFragment: Fragment() {
        private lateinit var recylclerView: RecyclerView
        private lateinit var viewAdapter: RecyclerView.Adapter<*>
        private lateinit var viewManager: RecyclerView.LayoutManager
        private lateinit var progressBar: ProgressBar
        private lateinit var auth: FirebaseAuth
        private var collections = ArrayList<Collection>()
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            super.onCreateView(inflater, container, savedInstanceState)
            val rootView = inflater.inflate(R.layout.fragment_collections, container, false)
    
            auth = FirebaseAuth.getInstance()
    
            progressBar = rootView.findViewById(R.id.progressBar)
            progressBar.isVisible = true
    
            viewManager = LinearLayoutManager(rootView.context)
            viewAdapter = CollectionAdapter(collections)
    
            recylclerView = rootView.findViewById<RecyclerView>(R.id.recycler_view).apply{
                setHasFixedSize(true)
                layoutManager = viewManager
                adapter = viewAdapter
            }
    
            getCollections()
    
            return rootView
        }
    
        fun getCollections() {
            var userId = auth.currentUser?.uid
            FirebaseFirestore.getInstance().collection("collections").whereEqualTo("user_id", userId).orderBy("name")
                .addSnapshotListener { value, e ->
                    if (e != null) {
                        Log.w("ERROR", "Listen failed.", e)
                        return@addSnapshotListener
                    }
    
                    for (doc in value!!) {
                        var collection = Collection(doc.id, doc.getString("name")!!)
                        collections.add(collection)
                    }
    
                    // Reload recyclerview data
                    recylclerView.adapter?.notifyDataSetChanged()
                    progressBar.isVisible = false
                }
        }
    
        
        inner class CollectionAdapter(private val dataset: ArrayList<Collection>): RecyclerView.Adapter<CollectionAdapter.CollectionViewHolder>() {
            inner class CollectionViewHolder(val view: View): RecyclerView.ViewHolder(view), View.OnClickListener {
    
                init {
                    view.setOnClickListener(this)
                }
    
                override fun onClick(p0: View?) {
                    println("TAPPED")
                    var itemsFragment = ItemsFragment()
                    itemsFragment.selectedCollection = dataset[layoutPosition]
                    val fragmentTransaction = activity?.supportFragmentManager?.beginTransaction()
                    println(fragmentTransaction)
                    fragmentTransaction?.add(R.id.viewPager, itemsFragment)
                    
                    fragmentTransaction?.addToBackStack(null)
                    fragmentTransaction?.commit()
                }
    
            }
    
            override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollectionAdapter.CollectionViewHolder {
                val view = LayoutInflater.from(parent.context).inflate(R.layout.collection_item, parent, false)
                return CollectionViewHolder(view)
            }
    
            override fun onBindViewHolder(holder: CollectionViewHolder, position: Int) {
                var name = dataset[position].name
              
                val textView = holder.view.findViewById<TextView>(R.id.collectionName)
                textView.text = name
            }
    
            override fun getItemCount(): Int {
                return dataset.size
            }
        }
    }
    
    0 回复  |  直到 4 年前