2012-06-07 198 views
0

我有一個ListView。我實現了OnItemClickListener以在單擊項目時打開一個ContextMenu。Android ListView無法點擊項目

lv = getListView(); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      showMenu(view); 
     } 
    }); 

並創建菜單的代碼。

public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.layout.friend_list_menu, menu); 
} 

public void showMenu(View v) { 
    registerForContextMenu(v); 
    openContextMenu(v); 
} 

我的問題是,當我點擊一個ListView項時,它確實打開了菜單。但是,如果我回到ListView,我不能再次單擊該項目。其他項目也一樣,關閉菜單後無法點擊。誰能幫我這個?

+0

什麼是'openContextMenu至(v)'這裏? – Praveenkumar

+0

@SpK:點擊項目時打開菜單。 – user1417127

+0

我覺得registerForContextMenu(listView); –

回答

2

您已經設置不正確。您在設置適配器時註冊上下文菜單,而不是單擊按鈕。

它應該是這樣的:

setListAdapter(lists); 
registerForContextMenu(getListView()); 

然後你有你的onCreateContextMenuonContextItemSelected方法(我編程方式創建我的,但你的充氣一個woudl工作一樣好):

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("List Operations"); 
    menu.add(0, v.getId(), 0, "Edit List"); 
    menu.add(0, v.getId(), 0, "Delete List"); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    if (item.getTitle() == "Edit List") { 
     // Do your edit stuff here 
    } else if (item.getTitle() == "Delete List") { 
     // Do your delete stuff here 
    } 
    return super.onContextItemSelected(item); 
} 

你不需要使用onItemClick,除非您想在短時間按該項目時進行操作(上下文菜單是長按)。

+0

沒有我想要的是當我點擊該項目(短點擊)時,它打開菜單。我插入registerForContextMenu(getListView());進入我的代碼,但當我點擊該項目,它沒有打開菜單或任何東西 – user1417127

+0

好吧,我解決了它。在onItemClick中,我只需要添加openContextMenu(getListView()),然後它將打開菜單上點擊。謝謝 – user1417127

0

以下代碼將起作用。

代碼:

ListView listview=(ListView)findViewByid(R.id.listview); 

    /**** here write appending data to listview*******/ 
    ArrayAdapter<String> adp=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,/**your list items**/); 
    listview.setadapter(adp); 
    registerForContextMenu(listview); 

    //listview item click listener 
    listview.setOnItemClickListener(new OnItemClickListener(){ 

@Override 
public void onItemClick(AdapterView<?> arg0, View v, int p, long arg3) { 
    // TODO Auto-generated method stub 

Toast.makeText(getApplicationContext(), "selected" + p, 30).show(); 
}}); 

    /****do your context menu code here*******/ 
+0

什麼是listview.setadapter(adp)中的adp; – user1417127

+0

adp與Arrayadapter相關.......找到編輯好的代碼... –