【问题标题】:How to switch viewpager Tab with button Click in Kotlin?如何在 Kotlin 中使用 Click 按钮切换 viewpager 选项卡?
【发布时间】:2019-05-20 14:23:44
【问题描述】:

我想通过在片段本身内单击按钮来切换片段。我已经创建了 viewpager + tablayout,一切正常,直到我创建了一个与我的活动通信的界面,我可以在其中为 Viewpager 设置不同的页面。我对 Kotlin 很陌生,我不明白我为什么要捕捉 NullPointer :( 我可能也很糟糕地初始化了我的按钮,但我不确定

这是我的 MainActivity 代码

class MainActivity : AppCompatActivity()
, MyFragment1.buttonClick {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    tablayout.addTab(tablayout.newTab().setIcon(R.drawable.ic_fragment1))
    tablayout.addTab(tablayout.newTab().setIcon(R.drawable.ic_fragment_2))
    tablayout.addTab(tablayout.newTab().setIcon(R.drawable.ic_fragment3))
    tablayout.tabGravity = TabLayout.GRAVITY_FILL

    val adapter = MyAdapter(this, supportFragmentManager, tablayout.tabCount)
    viewpager!!.adapter = adapter

    viewpager.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tablayout))


    val tabStrip = tablayout.getChildAt(0) as LinearLayout
    for (i in 0 until tabStrip.childCount) {
        tabStrip.getChildAt(i).setOnTouchListener { v, event -> true }
    }
}


override fun buttonClicked(view: View) {
    viewpager.currentItem = 2
}

fun selectIndex(index: Int) {
    viewpager.currentItem = index
}

override fun onBackPressed() {
    val currentPos = viewpager.currentItem
    if (currentPos != 0) {
        viewpager.currentItem = 0
    } else {
        super.onBackPressed()
    }
}
}



**And a code for my Fragment**



 class MyFragment1 : Fragment() {

private  var click: buttonClick? = null

interface buttonClick {
    fun buttonClicked(view: View)
}

var currentPage: Int = 0


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    val view: View = inflater.inflate(R.layout.fragment_my_fragment1, container, false)
    val btn: Button = view?.findViewById(R.id.btn_next)

    btn.setOnClickListener {
        Toast.makeText(context, "test", Toast.LENGTH_LONG).show()
        click?.buttonClicked(it)

    }

    return view
}

}

【问题讨论】:

    标签: android android-fragments kotlin android-viewpager android-tablayout


    【解决方案1】:

    你初始化你的click变量了吗?

    private var click: buttonClick? = null
    
    override fun onAttach(context: Context?) {
        super.onAttach(context)
        click = context as? buttonClick
    }
    
    override fun onDetach() {
        super.onDetach()
        click = null
    }
    

    【讨论】:

    • 很好,是的,我做到了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2020-11-24
    • 2021-10-11
    • 1970-01-01
    • 2014-08-07
    相关资源
    最近更新 更多