Android : 상황에 맞는 메뉴에서 클릭 한 위치를 찾는 방법
-
20-09-2019 - |
문제
데이터로 채워진 목록보기가 있습니다. 다음 코드를 사용하여 ListView의 컨텍스트 메뉴를 설정했습니다.
list.setOnCreateContextMenuListener
(
new View.OnCreateContextMenuListener()
{
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo)
{
AdapterContextMenuInfo mi =(AdapterContextMenuInfo) menuInfo;
menu.add(0, 0, 0, "Delete item");
}
}
);
선택한 de contextmenu menuitem을 제어하기 위해 다음과 같은 방법을 재정의합니다.
@Override
public boolean onContextItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case 0:
ShowAlert("hello from delete item");
break;
default:
return super.onContextItemSelected(item);
}
return true;
}
이 오버레이드 메소드에서 클릭 한 목록보기의 항목을 어떻게 찾을 수 있습니까?
미리 감사드립니다. 친애하는. 호세
해결책
당신은 사용할 수 있습니다 ContextMenu.ContextMenuInfo
.
그런 것 :
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int index = info.position;
}
당신은 또한 정확한 것을 얻을 수 있습니다 View
메뉴가 표시되는 것 :
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int index = info.position;
View view = info.targetView;
}
다른 팁
private static final int EDIT_ID = Menu.FIRST + 3;
private static final int DELETE_ID = Menu.FIRST + 4;
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut(
'e');
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete")
.setAlphabeticShortcut('d');
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
case EDIT_ID:
edit(info.id);
return (true);
case DELETE_ID:
delete(info.id);
return (true);
}
return (super.onOptionsItemSelected(item));
}
OK, 문제 정보를 해결하려면 **** 고정 멤버를 사용하고 홀더의 위치에서 값을 설정하여 LongClick Method Member에서 값을 저장하십시오.
public class CurrentPosition {
public static int Pos{ get; set; }
}
public bool OnLongClick(View v)
{
CurrentPosition.Pos = Position;
return false;
}
컨텍스트에서 사용하는 항목을 선택하십시오.
public override bool OnContextItemSelected(IMenuItem item)
{
switch (item.ItemId)
{
case 0:
return true;
case 1:
Toast.MakeText(this,CurrentPosition.Pos.ToString(), ToastLength.Long).Show();
return true;
case 2:
Toast.MakeText(this, "Save", ToastLength.Long).Show();
return true;
}
return true;
}
}
C# 코드
제휴하지 않습니다 StackOverflow