我有一個簡單的ViewPager支持一個PagerAdapter,但對於我實例化的視圖從不顯示在視圖分頁器中。視圖不顯示在ViewPager
我有要求純粹在代碼中開發用戶界面。所以我不能在instantiateItem方法中膨脹一個xml佈局。不幸的是,幾乎所有我看到的例子都是xml膨脹,這顯然不起作用。
所以我有一個PagerAdapter,(我不想使用片段)與ViewPager如下。該適配器需要一些數據
val viewAdapter = ViewPagerAdapter(data)
viewPager.adapter = viewAdapter
ViewPagerAdapter看起來是這樣的:
inner class ViewPagerAdapter(val data: List<Item>) : PagerAdapter() {
override fun isViewFromObject(view: View?, obj: Any?): Boolean {
return obj == view
}
override fun getCount(): Int {
return data.count()
}
override fun instantiateItem(container: ViewGroup?, position: Int): Any {
val rootLayout = LinearLayout(container?.context)
rootLayout.layoutParams = rootLayout.setDimensions(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
rootLayout.orientation = LinearLayout.HORIZONTAL
val title = Button(container?.context)
title.text = "Title"
title.textSize = 13f
title.setTextColor(Color.WHITE)
rootLayout.addView(title)
val subtitle = Button(container?.context)
subtitle.text = "Subtitle"
subtitle.textSize = 13f
subtitle.setTextColor(Color.WHITE)
rootLayout.addView(subtitle)
(container as ViewPager).addView(rootLayout)
return rootLayout
}
override fun getPageTitle(position: Int): CharSequence {
return data[position].title
}
override fun destroyItem(container: ViewGroup?, position: Int, obj: Any?) {
if (obj == null) return
container?.removeView(obj as View?)
}
}
}
對我的生活中,我看不出有什麼不對的代碼。我試過改變佈局,textview到一個按鈕,但沒有任何作品。
我希望有人能指出我正確的方向嗎?
謝謝!
更新:
我創建了一個簡單的應用程序,以證明我沒有做任何愚蠢的。應該能夠複製和粘貼這個並運行它,只要你已經添加了相關的庫。
import android.graphics.Color
import android.os.Bundle
import android.support.design.widget.AppBarLayout
import android.support.design.widget.CoordinatorLayout
import android.support.design.widget.TabLayout
import android.support.v4.view.PagerAdapter
import android.support.v4.view.ViewPager
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val rootLayout = CoordinatorLayout(this)
rootLayout.layoutParams = CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.MATCH_PARENT, CoordinatorLayout.LayoutParams.MATCH_PARENT)
val appBarLayout = AppBarLayout(this)
rootLayout.addView(appBarLayout)
appBarLayout.layoutParams = CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.MATCH_PARENT, CoordinatorLayout.LayoutParams.WRAP_CONTENT)
val tabLayout = TabLayout(this)
tabLayout.tabMode = TabLayout.MODE_FIXED
tabLayout.tabGravity = TabLayout.GRAVITY_FILL
appBarLayout.addView(tabLayout)
tabLayout.layoutParams = AppBarLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
//add viewpager
val viewPager = ViewPager(this)
viewPager.id = 11122
val viewAdapter = ViewPagerAdapter()
viewPager.adapter = viewAdapter
rootLayout.addView(viewPager)
viewPager.layoutParams = CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.MATCH_PARENT, CoordinatorLayout.LayoutParams.MATCH_PARENT)
tabLayout.setupWithViewPager(viewPager)
rootLayout.setBackgroundColor(Color.BLACK)
setContentView(rootLayout)
}
inner class ViewPagerAdapter : PagerAdapter() {
override fun isViewFromObject(view: View?, obj: Any?): Boolean {
return obj == view
}
override fun getCount(): Int {
return 3
}
override fun instantiateItem(container: ViewGroup?, position: Int): Any {
val rootLayout = LinearLayout(container?.context)
rootLayout.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)
rootLayout.orientation = LinearLayout.HORIZONTAL
val title = Button(container?.context)
title.text = "Title"
title.textSize = 13f
title.setTextColor(Color.WHITE)
rootLayout.addView(title)
val subtitle = Button(container?.context)
subtitle.text = "Subtitle"
subtitle.textSize = 13f
subtitle.setTextColor(Color.WHITE)
rootLayout.addView(subtitle)
val viewPager = container as ViewPager
viewPager.addView(rootLayout, 0)
return rootLayout
}
override fun getPageTitle(position: Int): CharSequence {
return "Title: $position"
}
override fun destroyItem(container: ViewGroup?, position: Int, obj: Any?) {
if (obj == null) return
when (obj) {
is ArrayList<*> -> for (item in obj) {
container?.removeView(item as View?)
}
else -> container?.removeView(obj as View?)
}
}
}
}
我不知道的優勢,但我猜你用錯誤的'addView'方法。試試從ViewPager - > https://developer.android.com/reference/android/support/v4/view/ViewPager.html#addView%28android.view.View%2C%20int%2C%20android.view.ViewGroup .LayoutParams%29 –
@RalphBergmann剛剛嘗試過:val viewPager = container as ViewPager viewPager.addView(rootLayout,0,ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)) - 沒有什麼區別。 – WolfBane
你可以省略你設置佈局參數的那一行,而不是使用'container.addView(rootLayout,0)'而不是 –