HelloCW
HelloCW

Reputation: 2235

I get the error "Expecting member declaration" when I convert code from Java to Kotlin,why?

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

Answers (2)

Adib Faramarzi
Adib Faramarzi

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

Levi Moreira
Levi Moreira

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

Related Questions