2017-06-05 35 views
0

私は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?) 
     } 
    } 
} 

}

+0

私はよく分からないが、私は推測するあなたが使用することができますKotlinのapply機能

viewPager.layoutParams = CoordinatorLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT).apply { behavior = AppBarLayout.ScrollingViewBehavior() } 

希望の利点を取ることができるあなたの問題

val pagerParams = CoordinatorLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT) pagerParams.behavior = AppBarLayout.ScrollingViewBehavior() viewPager.layoutParams = pagerParams 

を修正する必要があります間違った '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 –

+0

@RalphBergmannはちょうど試しました:val viewPager = Container ViewPager viewPager.addView(rootLayout、0、ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT、ViewGroup.LayoutParams.WRAP_CONTENT)) - 違いはありませんでした。 – WolfBane

+0

レイアウトパラメータを設定している行を省略して、代わりに 'container.addView(rootLayout、0)'を使用してください。 –

答えて

1

。あなたのビューページャにCoordinatorLayoutレイアウトパラメータを設定しているようですが、階層にAppBarLayoutもあることを確認して動作を設定するのを忘れています。したがって、ビューページャのコンテンツはタブレイアウトの背後に描画されています。これを確認するには、ASのレイアウトインスペクタを使用します。

次のことを行うと、あなたはまた、

+0

あなたはスターです!これは問題を解決しました。ビューポケベルのレイアウトパラメータを設定するコードを変更して位置を少し微調整したら、それは魅力的に機能します。 – WolfBane

+0

喜んでそれは助けた:) –

関連する問題