Reputation: 2235
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()
}
Upvotes: 3
Views: 6102
Reputation: 4054
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.
Upvotes: 2
Reputation: 11995
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) }
Upvotes: 1