全局值在方法中变为空

时间:2018-08-28 11:21:57

标签: java android

我创建了一个全班的私人成员,名为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中,有一个例外,说该成员为空! 有趣的是,我在该方法中使用了另一个变量,它工作正常。不同之处在于,该变量是在创建片段时设置的。 我该如何解决?

1 个答案:

答案 0 :(得分:0)

我已经研究了一段时间的代码,我唯一能想到的是该问题以某种方式与contextmenu的使用有关。在我看来,当应该执行菜单操作时,变量会重新设置为原始值。同样,我对此不太确定。

因此,到目前为止,我发现的唯一解决方案是将这个谷歌保持在“更高”的环境中: 当我仍然可以读取该值时,

getActivity().getIntent().putExtra(HomeActivity.ID_ENTRY, curMbr.getId_());

当我想使用它时,

final String mbrID = getActivity().getIntent().getStringExtra(HomeActivity.ID_ENTRY);