2011-05-05 33 views
7

對不起,愚蠢的問題,但我應該改變/添加在該代碼 - 顯示上下文菜單通過短按列表視圖中的項目?上下文菜單通過短的點擊

public class MyActivity extends ListActivity implements AdapterView.OnItemClickListener { 
    static final String[] COUNTRIES = new String[]{ 
      "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
      "Angola", "Anguilla", "Antarctica" 
    }; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES)); 

     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(this); 
    } 


    public void onCreateContextMenu(ContextMenu menu, View v, 
            ContextMenu.ContextMenuInfo menuInfo) { 
     Log.e("sdklfjsdkljfl", " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< "); 
     menu.setHeaderTitle("HELLO"); 

    } 

    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     Log.e("kjhasjkdhkas", "sdkhjkhskaf"); 
     this.openContextMenu(view); 
    } 
} 

回答

5

您需要在視圖上調用registerForContextMenu。

編輯以添加調用setLongClickable(假)

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
    registerForContextMenu(view); 
    view.setLongClickable(false); // undo setting of this flag in registerForContextMenu 
    this.openContextMenu(view); 
} 

你還需要實際添加菜單項或菜單將不會顯示任何。只設置標題是不夠的。

注意:我還沒有完全跟蹤它,但調用registerForContextMenu(view)會設置一個標誌,假定您需要長按上下文菜單。當設置此標誌時,AbsListView中的onTouch邏輯以某種方式不再觸發onClick。我沒有時間徹底挖掘這一點。當使用像ArrayAdapter這樣的簡單適配器,並將ListActivity與默認的ListView一起使用時,您將需要決定是在短時間內出現上下文菜單還是能夠使用longclick。

如果您對長按不感興趣,您可以通過撤銷registerForContextMenu(view)中設置的標誌來使短按菜單在短按下工作。

也許別人有更多的信息或更多的時間來挖掘代碼。

+0

我做了這個,感謝,但覺得─後我只能once-爲什麼叫上下文菜單1列表項? – eve 2011-05-06 05:55:49

+0

我用更多信息更新了答案。我不完全確定發生了什麼,但我今天沒有時間去挖掘它。我確實發佈了可能適合您的解決方法。 – slund 2011-05-06 15:20:41

7

這裏發佈的其他解決方案對我來說並不適用,因爲我使用的是ListFragment。但是下面的解決方案似乎相當不錯的工作,既ListFragment和ListActivity(或任何舊的ListView一般):

public void onListItemClick(ListView l, View v, int position, long id){ 
    l.showContextMenuForChild(v); 
} 

它更簡單和優雅。實際上,這實際上就是ListView類本身通過長時間點擊啓動上下文菜單的方式。

0

不要忘記registerForContextMenu()後添加此功能,停用長按:

listview.setLongClickable(isRestricted());