У меня есть 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
}
FlipFragment
код - person Dima Rostopira   schedule 09.12.2017getInstance()
выглядит странно... Покажите код, где вы добавляете фрагмент - person Dima Rostopira   schedule 09.12.2017fragmentManager
или этот фрагмент входит вR.layout.activity_main
? - person Dima Rostopira   schedule 09.12.2017onCreate
вы создаете локальную переменнуюvar flip = FlipFragment()
, прикрепляете к ней слушатель, а потом она исчезает (если вы прикрепилиonCreate
целиком) - person Dima Rostopira   schedule 09.12.2017