我有一個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);
}
}
}
您是通過ListView控件元素訪問的標籤。您應該直接訪問數據。你可能有一個遊標或一個包含你的標籤的地方。使用它 – njzk2
是的,我不相信我沒有想過它。可以從'ListAdapter'獲取數據。 – KickingLettuce