kls*_*ren 5 java android contextmenu
我正在编写一个应用程序,其中我希望用我自己制作的对象填充网格视图。我的自定义对象的代码如下。我希望我的对象能够扩展上下文菜单。
我的问题是我似乎无法在 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
}
}
Run Code Online (Sandbox Code Playgroud)
以下是对我有用的方法:我没有尝试从 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);
}
Run Code Online (Sandbox Code Playgroud)