0

我有一个Activity使用两个ContextMenu的。一种是长按 a 中的行listView。另一个,如果你点击一个ImageView. 你只能有一种onCreateContextMenu()方法,我需要根据ContextMenu我打开的方法做不同的事情。

在 上ListView,我需要得到一个TextView- 但null如果用户点击ImageView菜单,则会返回。所以我需要一个switch声明来将两者分开。

当我登录View v进入时ContextMenu,我得到了这个:

// For the ImageView
04-16 08:36:20.687: D/View:(7152): android.widget.ImageView{426295e0 V.ED..CL ...P.... 20,25-220,225 #7f070093 app:id/ibPP}

//For the ListView
04-16 08:36:20.687: D/View:(7152): android.widget.ListView{425edcb0 VFED..CL .F...... 10,16-710,1134 #102000a android:id/list}

所以当我这样做时:

switch (v.getId()) {
        case ??????: {

我应该对这两种不同的案例陈述提出什么看法?

更新。这是我的完整代码。我选择了if而不是switch

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
    if (v.getId() == android.R.id.list) {
        menu.setHeaderTitle("Available Actions");

        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;

        int position = info.position;
        ListView lv = (ListView) v;
        int firstVisible = lv.getFirstVisiblePosition();
        View rowView = lv.getChildAt(position - firstVisible);

        reviewWords = ((TextView) rowView.findViewById(R.id.labelComment))
                .getText().toString(); // Crashes here when click ImageView

        menu.add(2, 1, 0, "Edit");
        menu.add(2, 2, 0, "Delete");
        menu.add(2, 3, 0, "Share");

    } else if (v.getId() == R.id.ibPP) {

        MenuInflater inflater = getActivity().getMenuInflater();

        if (userName.equals(Rateit.username)) {
            inflater.inflate(R.menu.profile_pic, menu);
        }

    }

}
4

1 回答 1

1

显然,imageView 是R.id.ibPP,listView 是android.R.id.list

于 2013-04-16T15:43:18.843 回答