2012-11-18 3 views
0

나는 쇼 컨텍스트 메뉴를 늘 :안드로이드 스피너 짧은 클릭

uSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) 
     { 
      Toast.makeText(getBaseContext(), "Position = " + position, Toast.LENGTH_SHORT).show(); 
      pos = position; 
      registerForContextMenu(view); 
      openContextMenu(view); 
      unregisterForContextMenu(view); 
     } 
    }); 
    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo info) 
    { 
     if(pos != -1) 
     { 
      menu.setHeaderTitle("Admin menu"); 
      menu.add("Kick"); 
     }  
    } 
    @Override 
    public boolean onContextItemSelected(MenuItem item) 
    { 
     if(item.getTitle()=="Kick") 
     { 
      Toast.makeText(getBaseContext(), "Kick: " + usrStack.get(pos), Toast.LENGTH_SHORT).show();  
     } 
     return super.onContextItemSelected(item); 
    } 

모두 괜찮습니다,하지만 내 응용 프로그램을 시작하면 나는 첫 번째 요소에 대해이 상황에 맞는 메뉴를 참조 . (친절하게 익히 알고 있으니 첫 번째 요소는 회 전자에 표시됩니다. 따라서 첫 번째 요소를 선택하고 내 컨텍스트 메뉴를 호출한다고 생각합니다) onlick 만 표시하는 방법은 무엇입니까?

답변

1

가장 쉬운 방법은 onItemSelected 콜백에 부울 플래그를 추가하는 것입니다.

if (!isfirst){ 
    openContextMenu(spinner);     
} else { 
    isfirst = false; 
} 

당신은 또한 '트리거에게'콜백 메소드를하지 않습니다 클릭하면, 첫 번째 항목은 기본적으로 선택되어 있기 때문에 당신의 회 전자와 함께 두 번째 문제가 발생합니다. 이 문제를 해결하는 방법은 빈 항목을 목록의 맨 앞에 삽입하고 콜백에서이 항목을 확인하는 것입니다.

if (position != 0){ 
    openContextMenu(spinner);     
} else { 
    // Do nothing 
} 

편집 : 항목을 클릭 할 때마다 컨텍스트 메뉴에 대한 각보기가 등록되는 것으로 나타났습니다. 당신이 정의한 후에 회 전자를 한 번만 등록한 다음 openContextMenu (회 전자)를 호출 할 때 회 전자를보기로 전달하면됩니다

+0

와우, 멋진 솔루션! – Leo

관련 문제