Есть много ответов на этот вопрос на языке Java, но я не могу его применить
используя Kotlin.
Я использую ViewPager для переключения между вкладками и хочу, чтобы заголовок MainActivity менялся каждый раз, когда я проводил пальцем.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
container.adapter = TabPagerAdapter(supportFragmentManager)
container.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabs))
tabs.addOnTabSelectedListener(TabLayout.ViewPagerOnTabSelectedListener(container))
}
override fun setTitle(title: CharSequence?) {
supportActionBar?.title = title
}
}
Я использую "kotlin-android-extensions", поэтому контейнер - это идентификатор ViewPager, а tabs - это идентификатор TabLayout. Я также создал класс TabPagerAdapter, который расширяет FragmentPagerAdapter. Он возвращает правильную вкладку, которая является производной от фрагмента, с методом getItem. Я попытался достичь своей цели, переопределив метод getPageTitle, но он не работает.
class TabPagerAdapter(fragmentManager: FragmentManager) :
FragmentPagerAdapter(fragmentManager) {
override fun getItem(p0: Int): Fragment {
return when (p0) {
else -> TestTab.newInstance()
}
}
override fun getPageTitle(position: Int): CharSequence? {
return "test title"
}
override fun getCount(): Int {
return 1
}
}
Пример моей вкладки:
class NotificationsTab : Fragment() {
private val _title = "Notifications"
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_notifications, container, false)
}
companion object {
fun newInstance(): NotificationsTab {
return NotificationsTab()
}
}
}
Я хочу, чтобы переменная _title
была MainActivity
title.
XML-файлы, которые я использую:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.androidtest.activities.MainActivity"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="63"
app:elevation="0dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="50"
android:background="#ffffff"
app:layout_scrollFlags="scroll|enterAlways"
app:title="@string/app_name">
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:background="#ffffff"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="50"
app:tabIndicatorColor="@color/tabIndicatorColor"
app:tabIndicatorHeight="3dp">
<android.support.design.widget.TabItem
android:id="@+id/tab_profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"/>
<android.support.design.widget.TabItem
android:id="@+id/tab_notifications"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"/>
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/container"
android:layout_weight="390"
android:background="#ffffff"
android:layout_width="match_parent"
android:layout_height="0dp"/>
</LinearLayout>
fragment_notifications.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:text="notifications"
android:layout_gravity="center"
android:textAlignment="center"
android:textSize="56sp"
android:layout_height="wrap_content"/>
</LinearLayout>