2011-12-21 44 views
2

我想在用戶點擊適配器內的View時使用上下文菜單。問題在於,每個視圖的OnClick都在一個不是活動的類內[它是一個擴展BaseAdapter的類],在公共View getView(final int position,View convertView,ViewGroup parent)內部。Android的registerForContext從活動中移除

因此,當我嘗試創建上下文菜單或向registerForContextMenu註冊此類只擴展BaseAdapter時,這是不可能的。

所以問題是:onclick是在這個非活動類。是否可以給這個類一個允許它啓動一個上下文菜單的參數?

+0

問題解決: 在「不是活動的類」內部,我使用了AlertDialog。要使用它,我將使用此類的活動的上下文作爲參數。因此,可以向用戶顯示一個不是活動的選項列表。爲此,必須使用: Looper。準備(); \t \t \t \t \t \t ab.show(); \t \t \t \t \t \t Looper.loop(); 爲不是活動的類創建處理程序。 – Cavina 2011-12-21 22:08:52

回答

2

我想用一個上下文菜單當一個適配器內部上查看用戶點擊。

希望不是。當用戶長按AdapterView中的項目時,可以使用上下文菜單。 Here is a sample project證明了這一點。

如@ coder_For_Life22所示,其他任何內容(例如,當用戶點擊適配器內的視圖時彈出一些內容)應該是AlertDialog

因此,當我嘗試創建上下文菜單或註冊registerForContextMenu內只有擴展BaseAdapter的類,這是不可能的。

您只能撥打registerForContextMenu()一次,爲AdapterView。您從onCreate()開始執行此操作,因爲您呼叫setContentView()並因此創建了AdapterView

其他任何東西都應該是AlertDialog

是否有可能給這個類提供一個允許它啓動上下文菜單的參數?

你不應該需要「給這個類的參數,允許它啓動的上下文菜單」,因爲你只叫registerForContextMenu()一次,爲AdapterView

其他任何東西都應該是AlertDialog。您可以在Adapter上添加一個構造函數,該函數以Activity作爲參數,您的Adapter可以保留並用於AlertDialog。或者,如果AdapterActivity的內部類別,則只需使用MyActivityName.this即可引用Activity

+0

其實,我擁有的是帶有ButtonAdapter的GridView。我這樣做: adapter = new ButtonAdapter(this.getApplicationContext,50,50); 然後在擴展BaseAdapter的類中,我包含圖像併爲每個圖像設置onclick ...並且我希望這個點擊可以打開一個上下文菜單[或一個AlertDialog],允許使用此特定圖像執行特定的操作... – Cavina 2011-12-21 21:24:12

+0

@CommonsWare,感謝在GitHub上的例子。 – hotshot309 2011-12-30 15:24:56

2

你可以使用一個AlertDialog這個..

它看起來像..

gridview.setOnItemLongClickListener(new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) 
    { 
     showOptionsMenu(position); 
     return true; 
    } 

}); 

public void showOptionsMenu(int position) 
{ 
new AlertDialog.Builder(this) 
.setTitle("test").setCancelable(true).setItems(R.array.myOptions, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialoginterface, int i) { 
        //take actions here according to what the user has selected 
       } 
     } 
) 
.show(); 
} 
+0

我在Faces.class中有一個用BaseAdapter構造的網格。當我點擊網格中的一個圖像時,它看起來類擴展BaseAdapter中的onclicklistener,並且應該在Faces.class中打開一個菜單...所以我不能簡單地開始一個新的活動... – Cavina 2011-12-21 18:51:24

+0

檢查我的編輯。我改變了我的答案。 – 2011-12-21 18:56:25

+0

但是一個警告對話框必須在一個活動內嗎? 沒有其他方法可以爲BaseAdapter類[誰擁有每個ImageButton的點擊偵聽器]提供一個View或某種允許它顯示爲對話界面的東西? – Cavina 2011-12-21 19:24:49