有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

方法中的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) 个答案

  1. # 1 楼答案

    我研究代码已经有一段时间了,我唯一能想到的是,这个问题与contextmenu的使用有关。在我看来,当菜单操作应该被执行时,变量被设置回原来的状态。再说一次,我对此不太确定

    因此,到目前为止,我找到的唯一解决方案是将该值保持在一个“更高”的环境中: 当我仍能读取值时

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

    当我想用的时候

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