私はPagerAdapterでバックアップされた単純なViewPagerを持っていますが、インスタンシエートするビューはビュー・ページャーには表示されません。ViewPagerにビューが表示されない
私は、純粋にコードでUIを開発する必要があります。だから私はinstantiateItemメソッドでXMLレイアウトを膨らませることはできません。残念ながら、私が見たほとんどすべての例はxmlを膨張させていますが、明らかにうまくいきません。
私は以下のようにViewPagerでPagerAdapterを持っています(私はフラグメントを使いたくありません)。私はこのコードで間違っているものを見ることができない私の人生のために
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?)
}
}
}
:アダプター
val viewAdapter = ViewPagerAdapter(data)
viewPager.adapter = viewAdapter
いくつかのデータを取るViewPagerAdapterは、次のようになります。私は、レイアウトを変更しようとしましたが、ボタンにテキストビューが何も動作しません。
私は誰かが正しい方向に私を向けることを望んでいますか?
ありがとうございます!
アップデート:私は愚かな何もしていないよということを証明するためにシンプルなアプリを作成しました
。関連するライブラリを追加していれば、これをコピー&ペーストして実行できるはずです。あなたの完全なアクティビティコードを見てみると
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?)
}
}
}
}
私はよく分からないが、私は推測するあなたが使用することができますKotlinの
apply
機能希望の利点を取ることができるあなたの問題
を修正する必要があります間違った '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 ViewPager viewPager.addView(rootLayout、0、ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT、ViewGroup.LayoutParams.WRAP_CONTENT)) - 違いはありませんでした。 – WolfBane
レイアウトパラメータを設定している行を省略して、代わりに 'container.addView(rootLayout、0)'を使用してください。 –