我正在使用 ListFragment 并执行 onListItemClick。一切正常,但现在我想使用长项目点击(例如 setOnItemLongClickListener(new OnItemLongClickListener() for an Activity)。我如何在我的片段中使用它?
谢谢!
是的,tsync 发布的解决方案对我有用。我也遇到了同样的问题并认为这是不可能的。我尝试了上述建议如下:
public class ProjectsFragment extends ListFragment {
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Toast.makeText(getActivity(), "On long click listener", Toast.LENGTH_LONG).show();
return true;
}
});
并且成功了!
根据您想要实现的目标,您可以使用上下文菜单的给定方法:
首先注册被长按的 View 类(在 Fragment 类中):
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
registerForContextMenu(this.getListView());
}
实现这两种方法,创建一个上下文菜单并在单击菜单项时执行您想要的操作:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = this.getActivity().getMenuInflater();
inflater.inflate(R.menu.my_context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.add: // <-- your custom menu item id here
// do something here
return true;
default:
return super.onContextItemSelected(item);
}
}
这对我有用
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
//Get your item here with the position
return true;
}
});
有点晚了,但我最近遇到了片段中上下文菜单的问题。菜单会加载,但只有一个弹出浮动菜单,没有图标等。上面的答案帮助我指明了正确的方向。
因此,经过一些尝试和错误,我用以下方法解决了这个问题:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
registerForContextMenu(view)
}
在 onItemSelected 中:
override fun onItemSelected(itemViewHolder: Presenter.ViewHolder?, item: Any?, rowViewHolder: RowPresenter.ViewHolder?, row: Row?) {
itemViewHolder?.view?.setOnLongClickListener { v: View, ->
Boolean
requireActivity().openContextMenu(itemViewHolder.view)
true
}
}
这解决了问题,现在当我长按一个项目时,会显示带有图标的完整上下文菜单,并且浮动弹出菜单消失了。