2013-01-07 33 views
1

我在我的Custom ArrayAdapter的getView方法中有一個setOnClickLisnter方法。從ArrayAdapter中打開ContextMenu

我想要做的就是在ListView的每一行內單擊一個imageButton,我希望它打開一個ContextMenu。

我現在有ContextMenu工作,當你長時間點擊ListView。現在我想將相同的功能移到上面提到的簡短點擊。

我有這個我onCreate內:

registerForContextMenu(getListView()); 

我也有一個onCreateContextMenu的活動中。 我的主要問題是,您如何從ArrayAdapter內部訪問此內容?

編輯:我沒有做這樣的setOncLickListner方法裏面,只是在getView

代碼getView的地方:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final ViewHolder holder; 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 

      convertView = inflater.inflate(R.layout.commentlayout, parent, 
        false); 
      holder = new ViewHolder(); 
      holder.ib1 = (ImageButton) convertView 
        .findViewById(R.id.labelChatIcon); 


      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
      convertView.setOnCreateContextMenuListener(null); 
     } 

     holder.ib1.setBackgroundColor(Color.TRANSPARENT); 

     holder.ib1.setBackgroundColor(Color.TRANSPARENT); 
     holder.ib1.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       // Open Context Menu here 

      } 
     }); 

     return convertView; 
    } 

更新:我想我改變我的計劃並將使用帶單選按鈕的警報對話框。在這種情況下,上下文菜單可能不合適。 match_parent:

+0

如何對ArrayAdapter進行子分類,使其具有Activity屬性。您在創建適配器時將其傳遞給活動引用(即活動引用)。然後你在活動中調用該方法。這是你想要的? – EJK

+0

我沒有想過這樣做。現在,我的'ArrayAdapter'是它自己的類。目前,我想先看看是否有解決方案。 – KickingLettuce

回答

1

你可以使用一個Alert.Builder而不是上下文菜單中,您可以通過使用builder.setView(View v);

你將不得不與一羣寬度的不同按鍵的佈局文件中添加自定義視圖。退房this link所有可用

+0

這不就是我上面的代碼嗎? – KickingLettuce

+0

是的,但你的編輯說**編輯:我不必這樣做一個setOncLickListner方法內,只是在getView的某處**但你必須做的內部監聽器是我所說的 – dannyRods

+0

問題I相信是上下文菜單被預定義爲使用長按打開。最好的方法是使用alertBuilder,而不是可點擊的選項。 – dannyRods

0

不同的選擇請點擊此鏈接http://developer.android.com/guide/topics/ui/menus.html

,並使用

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


@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
     case R.id.edit: 
      editNote(info.id); 
      return true; 
     case R.id.delete: 
      deleteNote(info.id); 
      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 
+0

這只是告訴我如何創建實際的上下文菜單,這不是問題。我需要知道如何將動作分配給ArrayAdapter中的按鈕。 – KickingLettuce

0

的問題是舊的,但如果其他人需要它: 您不能直接打開上下文菜單。但是,您可以長按相應的視圖。這將打開上下文菜單。在你的情況下:

holder.ib1.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 

       // Open Context Menu here 
       convertView.performLongClick(); 
      } 
     }); 

但是,請注意,你想要的不是根據Android的設計指引。長按應該打開上下文菜單,而不是正常的點擊。

相關問題