2013-02-21 106 views
1

我正在显示消息列表,使用显示Adaptar的ListView的Activity,如下所示。如何从ArrayAdapter注册ForContextMenu

我需要在下面的DiscussArrayAdapter类的ImageView中注册ContextMenu菜单。

如果我只是从DiscussArrayAdapter打电话​​它不会接受它。

也,我不知道在哪里要覆盖的方法onCreateContextMenu

我messageActivity如下:

public class MessagesActivity extends Activity { 
     private ListView listView = null; 

     /** Called when the activity is first created. */ 
     private DiscussArrayAdapter adapter; 
     private ListView lv; 
@Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_discuss); 

      registerReceiver(mHandleMessageReceiver, new IntentFilter(
          DISPLAY_MESSAGE_ACTION)); 

      adapter = new DiscussArrayAdapter(getApplicationContext(), R.layout.listitem_discuss); 

      lv.setAdapter(adapter); 

,我有DiscussArrayAdapter类:

public class DiscussArrayAdapter extends ArrayAdapter<OneMessage>{ 

    private /*TextView*/EditText msgTextView; 
    private TextView sender; 

    private LinearLayout wrapper; 

    private SqlHelper dbHelper = null; 
    private Context context; 
    @Override 
    public void add(OneMessage object) { 

     dbHelper.addNewMessage(object); 
     super.add(object); 
    } 

    public DiscussArrayAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
     this.context=context; 

     if (dbHelper == null) { 
      dbHelper = new SqlHelper(context); 

     } 


    } 

    public int getCount() { 

     return dbHelper.getContactsCount(); 
    } 

    public OneMessage getItem(int index) { 

     return dbHelper.getOneComment(index+dbHelper.lastRawID()); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     if (row == null) { 
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.listitem_discuss, parent, false); 
     } 

     wrapper = (LinearLayout) row.findViewById(R.id.wrapper); 

     ImageView arrowImage = (ImageView) row.findViewById(R.id.aquaplayicon); 
    // this .registerForContextMenu(arrowImage); 
     OneMessage coment = getItem(position); 

     msgTextView =/*(TextView)*/(EditText) row.findViewById(R.id.comment); 

我省略休息代码简洁。

回答

3

context菜单功能都是为类Activity定义的,它们对于Adapter类不存在。

因此,无论你需要让你的adapteractivity的子类,或者你需要通过activityadapter所以它可以调用寄存器功能,活动将需要处理的context菜单(或通过事件到适配器来处理它)。

+1

我做的传递DiscussArrayAdapter的构造函数的“消息”活动的背景下,和比法“公共查看getView”我试着call:context.registerForContextMenu(arrowImage);但它不起作用 – user836026 2013-02-21 20:38:20

+0

@ user836026你是如何设法使其工作的? – dashhund 2015-03-11 16:35:57

2

必须与Activity类投上下文变量:

private Context context; 

public ExpandibleListViewAdapter(Context context) { 
     this.context = context; 
    } 

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parentView) { 

    if (convertView == null) { 
     ...... 
    } 

    ......... 

    ((Activity)context).registerForContextMenu(convertView); 

    return convertView; 
}