When I copy java Code A to a Kotlin project in Android Studio 3.01, the Code A is converted to Code B automatically.
And I add override for fun override onMenuItemClick(item: MenuItem) in Code B by the hint of Android Studio 3.01.
But I get still the error "Expecting member declaration" in Code B, what wrong with my kotlin Code B?
Code A
import android.support.v7.widget.PopupMenu;
public static void showPopup(View v, final Context mContext) {
PopupMenu popup = new PopupMenu(mContext, v);
popup.inflate(R.menu.menu_more);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
return HandleMenu(item, mContext);
}
});
popup.show();
}
Code B
import android.support.v7.widget.PopupMenu;
fun showPopup(v: View, mContext: Context) {
val popup = PopupMenu(mContext, v)
popup.inflate(R.menu.menu_more)
popup.setOnMenuItemClickListener(object : PopupMenu.OnMenuItemClickListener() {
fun override onMenuItemClick(item: MenuItem): Boolean {
return HandleMenu(item, mContext)
}
})
popup.show()
}
It should be override fun instead of fun override.
Also you can make use of Kotlin SAM and simplify it to popup.setOnMenuItemClickListener { item -> HandleMenu(item, mContext) } as the IDE suggests.
You could simply replace this:
popup.setOnMenuItemClickListener(object : PopupMenu.OnMenuItemClickListener() {
fun override onMenuItemClick(item: MenuItem): Boolean {
return HandleMenu(item, mContext)
}
})
with this:
popup.setOnMenuItemClickListener { item -> HandleMenu(item, mContext) }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With