Android 从ArrayAdapter内部打开上下文菜单
在自定义ArrayAdapter中的Android 从ArrayAdapter内部打开上下文菜单,android,listview,contextmenu,android-arrayadapter,Android,Listview,Contextmenu,Android Arrayadapter,在自定义ArrayAdapter中的getView方法中有一个setOnClickLisnter方法 我想做的是,在列表视图的每一行中,只需短按一次图像按钮,我想让它打开一个上下文菜单 当前,当您长时间单击列表视图时,ContextMenu可以正常工作。现在我想把同样的功能移到上面提到的短点击上 我在我的onCreate中有这个: registerForContextMenu(getListView()); 活动中还有一个onCreateContextMenu我的主要问题是,如何从阵列适配器内
getView
方法中有一个setOnClickLisnter
方法
我想做的是,在列表视图
的每一行中,只需短按一次图像按钮
,我想让它打开一个上下文菜单
当前,当您长时间单击列表视图时,ContextMenu可以正常工作。现在我想把同样的功能移到上面提到的短点击上
我在我的onCreate
中有这个:
registerForContextMenu(getListView());
活动中还有一个onCreateContextMenu
我的主要问题是,如何从阵列适配器内部访问它?
?
EDIT:我不必在setOncLickListner
方法中执行此操作,只需在getView
getView的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.commentlayout, parent,
false);
holder = new ViewHolder();
holder.ib1 = (ImageButton) convertView
.findViewById(R.id.labelChatIcon);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
convertView.setOnCreateContextMenuListener(null);
}
holder.ib1.setBackgroundColor(Color.TRANSPARENT);
holder.ib1.setBackgroundColor(Color.TRANSPARENT);
holder.ib1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Open Context Menu here
}
});
return convertView;
}
更新:我想我正在更改计划,并将使用带有单选按钮的警报对话框。上下文菜单在这种情况下可能不合适。您可以使用Alert.Builder而不是上下文菜单,您可以使用Builder.setView(视图v)添加自定义视图代码>
您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项您可以使用Alert.Builder而不是上下文菜单,您可以使用Builder.setView(视图v)添加自定义视图代码>
您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项点击此链接
和使用
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.edit:
editNote(info.id);
return true;
case R.id.delete:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
点击这个链接
和使用
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.edit:
editNote(info.id);
return true;
case R.id.delete:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
这个问题由来已久,但如果其他人需要它:
不能直接打开关联菜单。但是,您可以长时间单击相应的视图。这将打开关联菜单。就你而言:
holder.ib1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Open Context Menu here
convertView.performLongClick();
}
});
但是,请注意,您想要的并不是Android的设计指南。长时间的点击应该会打开上下文菜单,而不是普通的点击。这个问题是老问题,但如果其他人需要它:
不能直接打开关联菜单。但是,您可以长时间单击相应的视图。这将打开关联菜单。就你而言:
holder.ib1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// Open Context Menu here
convertView.performLongClick();
}
});
但是,请注意,您想要的并不是Android的设计指南。长时间单击可以打开上下文菜单,而不是普通的单击。如何对ArrayAdapter进行子分类,使其具有“活动”属性。在创建适配器时,将活动引用(即活动引用)传递给它。然后调用活动上的方法。这就是你想要的吗?我没想过那样做。现在,myArrayAdapter
是它自己的类。目前,我想先看看是否有使用这种方法的解决方案。如何对ArrayAdapter进行子分类,使其具有活动属性。在创建适配器时,将活动引用(即活动引用)传递给它。然后调用活动上的方法。这就是你想要的吗?我没想过那样做。现在,myArrayAdapter
是它自己的类。目前,我想先看看是否有使用这种方法的解决方案。这只是告诉我如何创建实际的上下文菜单,这不是问题所在。我需要知道如何将操作分配给ArrayAdapter中的按钮。这只是告诉我如何创建实际的上下文菜单,这不是问题所在。我需要知道如何将操作分配给ArrayAdapter中的按钮。是的,但您的编辑说编辑:我不必在setOncLickListner方法中执行此操作,我想说的就是在getView中的某个地方,但你必须在监听器中执行。我认为问题在于上下文菜单是预定义的,可以使用长点击打开。最好的方法可能是使用alertBuilder,而不是使用可点击的选项。我以前在短时间点击时制作过上下文菜单,所以我知道这很有效。。。想向我展示一个更基本的代码示例来说明您的意思吗?就alertbuilder而言,您可以使用builder.setView(view v)添加自定义视图;您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项。你知道这是个好主意。一个带有多选单选按钮的警报对话框将完全满足我的需要是的,但是你的编辑说编辑:我不必在setOncLickListner方法中这样做,我想说的就是在getView中的某个地方,但你必须在监听器中执行。我认为问题在于上下文菜单是预定义的,可以使用长点击打开。最好的方法可能是使用alertBuilder,而不是使用可点击的选项。我以前在短时间点击时制作过上下文菜单,所以我知道这很有效。。。想向我展示一个更基本的代码示例来说明您的意思吗?就alertbuilder而言,您可以使用builder.setView(view v)添加自定义视图;您将拥有一个布局文件,其中包含一组宽度不同的按钮:match\u parent。查看所有可用的不同选项。你知道这是个好主意。带有多选单选按钮的警报对话框正是我需要的