【发布时间】:2018-10-31 21:22:28
【问题描述】:
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 的 id,标签是 TabLayout 的 id。我还创建了扩展 FragmentPagerAdapter 的类 TabPagerAdapter。它使用 getItem 方法返回正确的选项卡,即 Fragment 衍生物。我试图通过覆盖 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 标题。
我使用的 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>
【问题讨论】: