方法中的java全局值变为null
我已经创建了整个类的一个私有成员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
中,有一个例外,说meber为null!
有趣的是,我在这个方法中使用了另一个变量,它工作得很好。不同之处在于,该变量是在创建片段时设置的。
我如何解决这个问题
# 1 楼答案
我研究代码已经有一段时间了,我唯一能想到的是,这个问题与contextmenu的使用有关。在我看来,当菜单操作应该被执行时,变量被设置回原来的状态。再说一次,我对此不太确定
因此,到目前为止,我找到的唯一解决方案是将该值保持在一个“更高”的环境中: 当我仍能读取值时
当我想用的时候