2012-03-18 31 views
7

Tôi biết câu hỏi này đã được hỏi trước đó và câu trả lời là ghi đè lênPrepareContextMenu()/onCreateContextMenu(). Nhưng tôi không hiểu và không nhận được bất kỳ giải pháp nào cho nó. Xin hãy giúp tôi làm thế nào để vô hiệu hóa menu ngữ cảnh cho các mục ListView cụ thể.cách tắt menu ngữ cảnh cho các mục ListView cụ thể trong Android

+0

ghi đè lênPrepareContextMenu() và kiểm tra vị trí danh sách được chọn hiện tại có cờ boolean để xóa tất cả các mục khỏi menu = win. – Blundell

+0

bạn có thể cụ thể hơn về điều này, tôi có nghĩa là tôi cần một mã mẫu để hiểu rõ ràng. Tôi không thể tìm ra cách để loại bỏ tất cả các mục từ trình đơn cho một mục danh sách SPECIFIC. –

Trả lời

5

Mở menu ngữ cảnh tùy thuộc vào một số logic của bạn. Ví dụ, trong phương thức onItemClick (trong listView của bạn), bạn nên kiểm tra nội dung của mục của bạn và hiển thị hoặc không hiển thị menu ngữ cảnh. Tôi không hiểu, tại sao nó là vấn đề cho bạn?

CẬP NHẬT

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); 
    } 

}

Có thể nó sẽ giúp bạn ... chúc may mắn ...

+0

Trong onCreate(), tôi đang đăng ký listview của mình với registerForContextMenu (listview) .Và trong onListItemClick (ListView l, View v, int position, id dài), làm thế nào tôi phải kích hoạt/vô hiệu hóa cho mục danh sách cụ thể. Giả sử lấy mục đầu tiên trong ListView. Làm thế nào tôi có nghĩa vụ phải viết cho phép/vô hiệu hóa mã sau này - listview.getItemAtPosition (0). ? –

+0

ngữ cảnh của bạnMenu sẽ hiển thị, khi bạn gọi phương thức showContextMenu(). Bạn sẽ kiểm tra mục của bạn, và nếu bạn cần hiển thị contextMenu bạn sẽ gọi showContextMenu() và theo cách khác, bạn sẽ không gọi nó. Vấn đề là gì? –

+0

Trong phương thức onListItemClick (ListView l, View v, int position, long id), có parametr "int position". Đó là vị trí của mục được nhấp hiện tại của bạn. Bạn kiểm tra mục bằng getItemAtPosition (vị trí int) và làm điều gì đó ... –

1

Ngoài ra bạn có thể đăng ký lại listview của bạn mà sẽ gây phương pháp onCreateContextMenu của bạn để thực hiện lại

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

Và sau đó bạn có thể ẩn hoặc hiển thị các mục menu với wh ich từng là logic bạn muốn trong phương thức onCreateContextMenu

+0

Tôi mua cái này. Tôi không nghĩ rằng rối tung lên với 'OnItemLongClickListener' là một ý tưởng hay. – Yeung

Các vấn đề liên quan