我正在编写一个应用程序,我希望用我自己制作的对象填充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
}
}
答案 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);
}