Почему я не могу настроить слушателя в Котлине?

У меня есть OnClickInterface (с методом fun onClickShape()) Main.class и FlipFragment.class и ImageView (который вызывает изображение в моем коде). Моя цель - сделать слушателя для изображения.

interface OnClickInterface {
  fun onClickShape()
}

Основная деятельность

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 в FlipFragment

var image = view.findViewById<ImageView>(R.id.fShapeView)
    image.setOnClickListener(View.OnClickListener {
      Log.d("FlipFragment", "PRESSED")
      if (listener != null)
        listener!!.onClickShape()
    })

Приложение загружалось хорошо, без ошибок. Но когда я нажал на изображение, которое я показываю в своем журнале FlipFragment: PRESSED, это означает, что мой метод вызова приложения из FragmentFlip, а не метод переопределения из MainActivity. Почему?

Я искал ошибку. Мое приложение показывает NPE здесь.

 flip.listener = object : OnClickInterface {
              override fun onClickShape() {
                Log.d("MainActivity", "Shape Pressed")
                ToastUtils.showSuccessMessage(baseContext, "someText")
              }}

Почему слушатель = null . Я определил его с помощью анонимного класса.

Весь код в 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
    }

  }


}

Если вам нужен весь код, это 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 источник
comment
Недостаточно информации. Предоставьте нам FlipFragment код   -  person Dima Rostopira    schedule 09.12.2017
comment
@DimaRostopira добавил весь код этого класса   -  person manwhotrycoding    schedule 09.12.2017
comment
getInstance() выглядит странно... Покажите код, где вы добавляете фрагмент   -  person Dima Rostopira    schedule 09.12.2017
comment
@DimaRostopira Я изменил описание MainActivity и добавил FragmentPagerAdapter.class   -  person manwhotrycoding    schedule 09.12.2017
comment
Я просил код, где вы прикрепляете фрагмент к активности. Вы используете fragmentManager или этот фрагмент входит в R.layout.activity_main?   -  person Dima Rostopira    schedule 09.12.2017
comment
@DimaRostopira я прикрепляю адаптер fragmentManager var = TabsPagerFragmentAdapter(supportFragmentManager) mViewPager.adapter = адаптер   -  person manwhotrycoding    schedule 09.12.2017
comment
Я вижу, вы создаете только экземпляр фрагмента, но не видите, где вы его используете.   -  person Dima Rostopira    schedule 09.12.2017
comment
Почему вы не используете onAttach для получения экземпляра слушателя из контекста? я думаю, что это правильная форма, чтобы получить слушателя.   -  person victorldavila    schedule 09.12.2017
comment
Я прикрепляю его в tabInit и пытаюсь добавить прослушиватель в методе OnCreate к изображению, которое находится в FlipFragment.   -  person manwhotrycoding    schedule 09.12.2017
comment
В onCreate вы создаете локальную переменную var flip = FlipFragment(), прикрепляете к ней слушатель, а потом она исчезает (если вы прикрепили onCreate целиком)   -  person Dima Rostopira    schedule 09.12.2017
comment
В чем смысл OnClickInterface? У вас уже есть OnClickListener, прикрепленный к вашему изображению, и он работает, зачем все усложнять?   -  person donfuxx    schedule 09.12.2017
comment
@victorldavila Это хорошая идея, но я не знаю, как это сделать. Я попробую поискать об этом.   -  person manwhotrycoding    schedule 09.12.2017
comment
возможно, эта ссылка может вам помочь @VadimMarchenko stackoverflow.com/questions/47513664/   -  person victorldavila    schedule 09.12.2017