Tabulatoren in Kotlin

  • Antworten:2
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 441

21.07.2021, 18:02:00 via Website

Hallo zusammen

Ich möchte in einer App, die ich in Kotlin erstelle, ein TabLayout einbauen. Ich habe im Internet ein Beispiel mit einem Adapter gefunden. Ich habe es nachgebaut und es funktioniert nicht. Irgend was ist bei mir faul.

Das eine Problem ist, dass in meiner AdapterKlasse der Rückgabewert "FragmentPagerAdapter" veraltet ist.

class MyAdapter(var context : Context, fm: FragmentManager, var tabCount: Int) : FragmentPagerAdapter(fm){

Was gehört an diese Stelle? Oder hat mir jemand einen Link auf ein neueres Beispiel.

Oder was läuft bei mir schieff?
MainActivity:

package ch.robbisoft.klassennotfall

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Menu
import android.widget.FrameLayout
import android.widget.Toolbar
import androidx.viewpager.widget.ViewPager
import androidx.viewpager2.widget.ViewPager2
import ch.robbisoft.klassennotfall.databinding.ActivityMainBinding
import com.google.android.material.tabs.TabLayout

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding
private lateinit var tabs : TabLayout
private lateinit var page : ViewPager

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    val view = binding.root
    setContentView(view)

    binding.tobBar.inflateMenu(R.menu.menu_main)
    tabs = binding.tabLaytop
    page = binding.laySeite

    tabs.addTab(tabs.newTab().setText(getString(R.string.lbl_tab_eins)))
    tabs.addTab(tabs.newTab().setText(getString(R.string.lbl_tab_zwei)))
    tabs.tabGravity = TabLayout.GRAVITY_FILL

    val adapter = MyAdapter(this, supportFragmentManager, tabs.tabCount)
    page.adapter = adapter
    page.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
    tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
        override fun onTabSelected(tab: TabLayout.Tab?) {
            if (tab != null) {
                page.currentItem = tab.position
            }
        }

        override fun onTabUnselected(tab: TabLayout.Tab?) {
            TODO("Not yet implemented")
        }

        override fun onTabReselected(tab: TabLayout.Tab?) {
            TODO("Not yet implemented")
        }

    })
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    return super.onCreateOptionsMenu(menu)
    menuInflater.inflate(R.menu.menu_main, menu)
    return true
}

}

AdapterKlasse:

package ch.robbisoft.klassennotfall

import android.content.Context
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter

class MyAdapter(var context : Context, fm: FragmentManager, var tabCount: Int) : FragmentPagerAdapter(fm){
override fun getCount(): Int {
return tabCount
}

override fun getItem(position: Int): Fragment {
    return when (position) {
        0 -> {
            FragKlasseA()
        }
        1 -> {
            FragKlasseB()
        }
        else -> getItem(position)
        }
    }

}

Was muss ich verbessern damit es läuft?

Gruss Renato

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 441

22.07.2021, 12:16:10 via Website

Problem gelöst. Mir ist nicht aufgefallen, dass pageLayout das tabLayout überdeckte. So konnte einfach nichts geschehen. Ich habe nun ein LinearLayout oben eingesetzt und nun sind die beiden Layouts wirklich übereinander angeordnet.

Gruss Renato

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 441

21.07.2021, 21:27:59 via Website

Es ist zum verrückt werden. Ich habe noch ein zweites Beispiel gefunden, das nach dem selben Prinzip vorgeht. Ich habe nochmals alles kontrolliert. Ich finde kein Fehler und trotzdem geht nichts. Es wird nichts angezeigt und ich kann auch den Tab nicht wechseln. Die App steht einfach still.

Gruss Renato

Hilfreich?
Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 441

22.07.2021, 12:16:10 via Website

Problem gelöst. Mir ist nicht aufgefallen, dass pageLayout das tabLayout überdeckte. So konnte einfach nichts geschehen. Ich habe nun ein LinearLayout oben eingesetzt und nun sind die beiden Layouts wirklich übereinander angeordnet.

Gruss Renato

Hilfreich?
Diskutiere mit!