문제

데이터로 채워진 목록보기가 있습니다. 다음 코드를 사용하여 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# 코드

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top