Saya memiliki OnClickInterface (dengan metode fun onClickShape()) Main.class, dan FlipFragment.class dan ImageView (yang memanggil gambar dalam kode saya). Tujuan saya adalah menjadikan pendengar gambar.
interface OnClickInterface {
fun onClickShape()
}
Aktifitas utama
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initTabs()
var flip = FlipFragment()
flip.listener = object : OnClickInterface {
override fun onClickShape() {
Log.d("MainActivity", "Shape Pressed")
ToastUtils.showSuccessMessage(baseContext, "sometext")
}
}
}
fun initTabs() {
var adapter = TabsPagerFragmentAdapter(supportFragmentManager)
mViewPager.adapter = adapter
mTabLayout.setupWithViewPager(mViewPager)
}
}
onCreate di FlipFragment
var image = view.findViewById<ImageView>(R.id.fShapeView)
image.setOnClickListener(View.OnClickListener {
Log.d("FlipFragment", "PRESSED")
if (listener != null)
listener!!.onClickShape()
})
Aplikasi dimuat dengan baik, tanpa kesalahan. Tetapi ketika saya menekan gambar yang saya tampilkan di log saya FlipFragment: PRESSED itu berarti aplikasi saya memanggil metode dari FragmentFlip, bukan mengganti metode dari MainActivity. Mengapa?
Saya mencari kesalahan. Aplikasi saya menunjukkan NPE di sini.
flip.listener = object : OnClickInterface {
override fun onClickShape() {
Log.d("MainActivity", "Shape Pressed")
ToastUtils.showSuccessMessage(baseContext, "someText")
}}
Mengapa pendengar = null . Saya mendefinisikannya dengan kelas anonim.
Semua kode di FlipFragment
class FlipFragment : Fragment() {
private var layout = R.layout.view_flip
var listener: OnClickInterface? = null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
var view: View
view = inflater!!.inflate(layout, container, false)
var image = view.findViewById<ImageView>(R.id.fShapeView)
image.setOnClickListener(View.OnClickListener {
Log.d("FlipFragment", "PRESSED")
if (listener != null){
listener!!.onClickShape()}
})
return view
}
companion object {
fun getInstanse(): FlipFragment {
var args = Bundle()
var flipFragment = FlipFragment()
flipFragment.arguments = args
return flipFragment
}
}
}
Jika Anda memerlukan semua kode, itu adalah FragmentPagerAdapter.class
class TabsPagerFragmentAdapter(fm: FragmentManager?) : FragmentPagerAdapter(fm) {
var tabs: Array<String> = arrayOf("Flip", "Multi")
override fun getItem(position: Int) = when(position){
0 -> FlipFragment.getInstanse()
1 -> Mulit.getInstanse() //it is empty now
else -> FlipFragment.getInstanse()
}
override fun getPageTitle(position: Int) = tabs[position]
override fun getCount() = tabs.size
}
FlipFragment
- person Dima Rostopira   schedule 09.12.2017getInstance()
terlihat aneh... Tampilkan kode tempat Anda menambahkan fragmen - person Dima Rostopira   schedule 09.12.2017fragmentManager
atau fragmen ini termasuk dalamR.layout.activity_main
? - person Dima Rostopira   schedule 09.12.2017onCreate
Anda membuat variabel lokalvar flip = FlipFragment()
, melampirkan pendengar ke dalamnya, dan kemudian menghilang (jika Anda melampirkan seluruhonCreate
) - person Dima Rostopira   schedule 09.12.2017