Mengapa saya tidak dapat menyetel pendengar di Kotlin?

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
}

person manwhotrycoding    schedule 09.12.2017    source sumber
comment
Informasinya tidak cukup. Berikan kami kode FlipFragment   -  person Dima Rostopira    schedule 09.12.2017
comment
@DimaRostopira menambahkan semua kode kelas ini   -  person manwhotrycoding    schedule 09.12.2017
comment
getInstance() terlihat aneh... Tampilkan kode tempat Anda menambahkan fragmen   -  person Dima Rostopira    schedule 09.12.2017
comment
@DimaRostopira Saya telah mengubah deskripsi MainActivity dan menambahkan FragmentPagerAdapter.class   -  person manwhotrycoding    schedule 09.12.2017
comment
Saya meminta kode, tempat Anda melampirkan fragmen ke aktivitas. Apakah Anda menggunakan fragmentManager atau fragmen ini termasuk dalam R.layout.activity_main?   -  person Dima Rostopira    schedule 09.12.2017
comment
@DimaRostopira saya lampirkan fragmentManager var adapter = TabsPagerFragmentAdapter(supportFragmentManager) mViewPager.adapter = adaptor   -  person manwhotrycoding    schedule 09.12.2017
comment
Saya melihat Anda hanya membuat contoh fragmen, tetapi tidak melihat di mana Anda menggunakannya   -  person Dima Rostopira    schedule 09.12.2017
comment
Mengapa Anda tidak menggunakan onAttach untuk mendapatkan instance pendengar dari konteks? menurutku ini adalah bentuk yang tepat untuk menarik pendengarnya.   -  person victorldavila    schedule 09.12.2017
comment
Saya melampirkannya di tabInit dan mencoba menambahkan pendengar dalam metode OnCreate ke gambar yang terletak di FlipFragment   -  person manwhotrycoding    schedule 09.12.2017
comment
Di onCreate Anda membuat variabel lokal var flip = FlipFragment(), melampirkan pendengar ke dalamnya, dan kemudian menghilang (jika Anda melampirkan seluruh onCreate)   -  person Dima Rostopira    schedule 09.12.2017
comment
Apa gunanya OnClickInterface? Anda sudah memiliki OnClickListener yang terpasang pada gambar Anda dan berfungsi, mengapa membuat segalanya menjadi lebih rumit?   -  person donfuxx    schedule 09.12.2017
comment
@victorldavila Itu ide bagus, tapi saya tidak tahu bagaimana melakukannya. Saya akan mencoba mencari tentang hal itu.   -  person manwhotrycoding    schedule 09.12.2017
comment
mungkin tautan ini dapat membantu Anda @VadimMarchenko stackoverflow.com/questions/47513664/   -  person victorldavila    schedule 09.12.2017