2012-12-04 3 views
0

나는 DialogFragment를 확장하는 클래스가 있는데, 여기서는 ListView를 보여주고있다. 이 목록에있는 항목에 대해 LongPress 옵션을 갖고 싶습니다. 따라서 onCreateContextMenuonContextItemSelected을 재정의했습니다. 상황에 맞는 메뉴가 올바른 옵션으로 표시됩니다.onContextMenuClosed extends DialogFragment

내가 겪고있는 문제는 onContextItemSelected 방법에서 getDialog().dismiss()으로 전화 할 수 없다는 것입니다.

DialogFragment를 확장하는 클래스의 onContextItemSelected 메서드 내에서 DialogFragment를 확장하는 클래스를 닫는 적절한 방법은 무엇입니까?

/* 
* (non-Javadoc) 
* @see android.support.v4.app.Fragment#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo) 
*/ 
@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) 
{ 
    if(view.getId() == listView.getId()) 
    { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 
     Industry industry = (Industry) listView.getItemAtPosition(info.position); 

     menu.setHeaderTitle(industry.name); 
     menu.add(Menu.NONE, USE_INDUSTRY, 0, USE_INDUSTRY_TEXT); 
    } 
} 

/* 
* (non-Javadoc) 
* @see android.support.v4.app.Fragment#onContextItemSelected(android.view.MenuItem) 
*/ 
@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
    if(item.getItemId() == USE_INDUSTRY) 
    { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
     Industry industry = (Industry) listView.getItemAtPosition(info.position); 

     MyApplication.BUS.post(new IndustryEvent(industry.ID, -2)); 
     getDialog().dismiss(); 
    } 

    return true; 
} 
+0

일부 코드를 게시하십시오. –

+0

요청한대로 코드를 추가했습니다. – drspaceboo

답변

2

답변 : 대화 상자 단편에서 onContextItemSelected()이 호출되지 않았습니다. 그 말은 getDialog().dismiss()이 호출되지 않았 음을 의미합니다.

이 문제를 해결할 수있는 유일한 방법은 MenuItem에 onMenuItemClickListener을 설정하고 거기에 클릭을 등록하는 것입니다. 아래는 내가 사용하고있는 마지막 코드입니다.

/* 
* (non-Javadoc) 
* @see android.support.v4.app.Fragment#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo) 
*/ 
@Override 
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) 
{ 
    if(view.getId() == listView.getId() && isIndustryLevel) 
    { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 
     Industry industry = (Industry) listView.getItemAtPosition(info.position); 

     menu.setHeaderTitle(industry.name); 
     menu.add(Menu.NONE, USE_INDUSTRY, 0, USE_INDUSTRY_TEXT); 
     menu.getItem(0).setOnMenuItemClickListener(new OnUseIndustryButtonClick()); 
    } 
} 

private class OnUseIndustryButtonClick implements MenuItem.OnMenuItemClickListener 
{ 
    /* 
    * (non-Javadoc) 
    * @see android.view.MenuItem.OnMenuItemClickListener#onMenuItemClick(android.view.MenuItem) 
    */ 
    @Override 
    public boolean onMenuItemClick(MenuItem item) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
     Industry industry = app.industries.get(info.position); 

     MyApplication.BUS.post(new IndustryEvent(industry.ID, -2)); 
     getDialog().dismiss(); 
     return true; 
    }  
}