我可以从自定义类(而不是活动类)中扩展上下文菜单吗?

时间:2014-11-03 13:52:03

标签: java android contextmenu

我正在编写一个应用程序,我希望用我自己制作的对象填充gridview。我的自定义对象的代码如下。除了其他方面,我希望我的对象膨胀上下文菜单。

我的麻烦是我似乎无法在Activity类之外使用getMenuInflater()方法。 。 。为了解决这个限制,我将主要活动传递给对象。虽然这确实让我调用了getMenuInflater()方法,但在运行代码时仍然没有看到菜单。

感谢任何帮助!

我知道我可以直接从Activity类中提取菜单。但是,如果可能的话,我希望将所有这些功能保留在自定义对象中。

import java.io.File;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ImageView;

public class AnimalKind extends ImageView implements OnClickListener, OnLongClickListener{

    private int         m_imageId, m_soundId;
    private Context     m_ctx;
    private Activity    m_activity;


    public AnimalKind(Context ctx, int imageId, int soundId, Activity act) {
        super(ctx);

        m_imageId   = imageId;
        m_activity  = act;
        m_ctx       = ctx;
        super.setImageResource(imageId);
        super.setAdjustViewBounds(true);
        super.setScaleType(ImageView.ScaleType.FIT_XY);
        super.setPadding(1, 1, 1, 1);
        super.setBackgroundColor(Color.BLACK);
        super.setOnClickListener(this);
        super.setOnLongClickListener(this);
        m_activity.registerForContextMenu(this); 
      }


    @Override
    protected void onCreateContextMenu(ContextMenu menu) {
        super.onCreateContextMenu(menu);

        MenuInflater inflater = m_activity.getMenuInflater();
        inflater.inflate(R.menu.animal_kind_menu, menu);

    }


    //@Override
    public void onClick(View v) {
        //Do stuff
    }



    @Override
    public boolean onLongClick(View v) {
        //Do stuff
    }

}

1 个答案:

答案 0 :(得分:0)

这对我有用:我没有尝试从XML中扩展菜单,而是直接从java创建菜单项:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {   

        menu.add(1, 1, 1, "Share Animal Sound");
        menu.add(1, 2, 2, "Change Picture");
        menu.add(1, 3, 3, "Change Sound");

        menu.getItem(0).setOnMenuItemClickListener(this); 
        menu.getItem(1).setOnMenuItemClickListener(this); 
        menu.getItem(2).setOnMenuItemClickListener(this); 
    }