ฉันมี OnClickInterface (ด้วยวิธี fun onClickShape()) Main.class และ FlipFragment.class และ ImageView (ซึ่งเรียกว่า image ในโค้ดของฉัน) เป้าหมายของฉันคือการทำให้ผู้ฟังเห็นภาพ
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()
โดยแนบ Listener เข้าไป จากนั้นตัวแปรจะหายไป (หากคุณแนบทั้งonCreate
) - person Dima Rostopira   schedule 09.12.2017