2013-04-16 34 views
0

我有一個Activity,它使用兩個ContextMenu's。一個是長時間按listView中的行。另一個,如果你點擊一個ImageView。你只能有一個onCreateContextMenu()方法,我需要做不同的事情取決於我打開哪個ContextMenu如何爲ContextMenu Switch Statement獲取不同視圖的值

ListView,我需要得到一個TextView - 但如果用戶點擊了ImageView菜單上,而不是這將返回null。所以我需要一個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 ??????: { 

我應該把什麼意見了兩種不同的case語句?

UPDATE。這是我的完整代碼。我去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); 
     } 

    } 

} 
+1

您是通過ListView控件元素訪問的標籤。您應該直接訪問數據。你可能有一個遊標或一個包含你的標籤的地方。使用它 – njzk2

+0

是的,我不相信我沒有想過它。可以從'ListAdapter'獲取數據。 – KickingLettuce

回答

1

顯然,ImageView的是R.id.ibPP和ListView控件是android.R.id.list

+0

我認爲你是對的,但它仍然崩潰,看到更新的代碼。我添加了整個方法。 – KickingLettuce

+0

崩潰=>後棧跟蹤 – njzk2