我有一张带寻呼机的表格。我的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
}
}
}