我创建了一个全班的私人成员,名为Member curMbr;
活动(而不是片段,因为它是在frament类中)具有一个listview
成员的一些贡献。
我在该列表上还有一个上下文菜单。单击贡献时,我希望(自定义)对话框显示有关成员的详细信息。 (成员ID是贡献对象的一部分。)
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
Log.d("FRGCOTIZ02", "create ctxt menu");
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
String[] menuItems = getResources().getStringArray(R.array.ar_menu_ctxt_participant);
// Get selected member
Contribution curCotis = (Contribution) (((ListView)v).getItemAtPosition(info.position));
Participant p = new Participant(helper.getDBItem(DBHelper.TABLE_PARTICIPANT,
DBHelper.COL_ID, curCotis.getParticipant()));
curMbr = new Member(helper.getDBItem(DBHelper.TABLE_MEMBER, DBHelper.COL_ID, p.getMember()));
for (int i = 0; i < menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
Log.d("FRGCOTIZ01", curMbr.getId_());
}
@Override
public boolean onContextItemSelected(MenuItem item) {
return ( applyContextMenuSelection(item) || super.onContextItemSelected(item) );
}
private boolean applyContextMenuSelection(MenuItem item) {
switch (item.getItemId()) {
case 0: // Summary
final Dialog dlg = new Dialog(this.getContext());
final String sessID;
try {
sessID = KUtil.DATE_FORMAT.format(curSess.getDate());
dlg.setContentView(R.layout.alert_show_charges);
Button btnOK = dlg.findViewById(R.id.btn_alertOK);
btnOK.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setupAlertDialogCharges(dlg, sessID, curMbr.getId_());
}
});
Button btnCancel = dlg.findViewById(R.id.btn_alertCancel);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dlg.dismiss();
}
});
dlg.show();
} catch (Exception e){
Log.d("FRAGMENT Contribution", e.getMessage());
}
break;
case 1: // Collect
break;
case 2: // Cancel
break;
default:
break;
}
return true;
}
在方法onCreateContextMenu
中,我可以获取该成员并显示其ID。
但是在方法applyContextMenuSelection
中,有一个例外,说该成员为空!
有趣的是,我在该方法中使用了另一个变量,它工作正常。不同之处在于,该变量是在创建片段时设置的。
我该如何解决?
答案 0 :(得分:0)
我已经研究了一段时间的代码,我唯一能想到的是该问题以某种方式与contextmenu的使用有关。在我看来,当应该执行菜单操作时,变量会重新设置为原始值。同样,我对此不太确定。
因此,到目前为止,我发现的唯一解决方案是将这个谷歌保持在“更高”的环境中: 当我仍然可以读取该值时,
getActivity().getIntent().putExtra(HomeActivity.ID_ENTRY, curMbr.getId_());
当我想使用它时,
final String mbrID = getActivity().getIntent().getStringExtra(HomeActivity.ID_ENTRY);