2012-03-18 2 views
7

이 질문은 이전에 물 었음을 알고 회신은 onPrepareContextMenu()/onCreateContextMenu()를 재정의하는 것이 었습니다. 그러나 나는 didnt한다 그것을 위해 어떤 해결책이라도 이해하고 didnt한다. 특정 ListView 항목의 컨텍스트 메뉴를 비활성화하는 방법을 알려주십시오.안드로이드에서 특정 ListView 항목에 대한 컨텍스트 메뉴를 비활성화하는 방법

+0

에서 onPrepareContextMenu()를 재정 의하여 현재 선택 목록 위치에 대한 확인을 수행하면 부울 플래그가있어 menu = win에서 모든 항목을 제거합니다. – Blundell

+0

당신은 이것에 대해보다 구체적으로 설명 할 수 있습니다. 명확하게 이해하기 위해서는 샘플 코드가 필요합니다. 특정 목록 항목에 대한 메뉴에서 모든 항목을 제거하는 방법을 알아낼 수 없습니다. –

답변

5

컨텍스트 메뉴 열기는 일부 논리에 따라 다릅니다. 예를 들어, onItemClick (listView에서) 메서드에서 항목의 내용을 확인하고 컨텍스트 메뉴를 표시하거나 표시하지 않으면 안됩니다. 이해가 안 돼 왜 너에게 문제가되는거야?

UPDATE

public class ExampleActivity extends ListActivity { 

    private ListView mListView; 
    private ArrayList<String> mList = new ArrayList<String>(); 
    private ArrayAdapter<String> mArrayAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mArrayAdapter = new ArrayAdapter<String>(this, android.R.id.list ,mList); 
     mListView = (ListView) findViewById(android.R.id.list); 
     setListAdapter(mArrayAdapter); 
     registerForContextMenu(mListView); 

     mListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> adapterView , View v,int position, long id) { 
       mListView.getItemAtPosition(position); //check current item with your logic and show or don't show contextMenu 
       // for example I will show 
       mListView.showContextMenu(); //to show 
       return true; 
      } 
     }); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     // add contextmenu items 
     super.onCreateContextMenu(menu, v, menuInfo); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     // todo some logic... 
     return super.onContextItemSelected(item); 
    } 

}

또한 당신이 당신의 목록보기를 다시 등록 할 수 있습니다
+0

onCreate()에서 registerForContextMenu (listview)로 listview를 등록하려고합니다. onListItemClick (ListView l, View v, int 위치, long id)에서 특정 목록 항목에 대해 사용/사용 안함을 설정해야합니다. ListView에서 첫 번째 항목을 가져 간다고 가정합니다. 어떻게 내가이 - listview.getItemAtPosition (0) 뒤에 코드를 사용/사용 안하기로되어 있습니다. ? showContextMenu() 메서드를 호출하면 –

+0

컨텍스트 메뉴가 표시됩니다. 항목을 검사하고 contextMenu를 표시해야하는 경우 showContextMenu()를 호출하고 다른 방법으로 호출하지 않습니다. 문제가 무엇입니까? –

+0

onListItemClick (ListView l, View v, int position, long id) 메서드에는 "int position"매개 변수가 있습니다. 현재 클릭 한 항목의 위치입니다. 당신은 getItemAtPosition (int 위치)로 항목을 체크하고 뭔가를합니다 ... –

1

onCreateContextMenu 방법을 일으킬 것이다 ... 그것은 ... 행운을 당신을 도울 것입니다 수 있음 다시 실행

ListView lv = (ListView) findViewById(R.id.lvExample); 
registerForContextMenu(lv); 

그런 다음 wh를 사용하여 메뉴 항목을 숨기거나 표시 할 수 있습니다. 어느 논리도 onCreateContextMenu 메서드

+0

나는 이것을 삽니다. 나는'OnItemLongClickListener'를 망쳐 놓는 것이 좋은 생각이라고 생각하지 않는다. – Yeung

관련 문제