安卓活动无法从弹出式菜单中启动



我想从弹出菜单中打开一个新的活动Make_a_contact。我确信这个问题只与下面的代码有关,因为当我取消对下面的代码-Toast.makeText等的注释时(并删除我想要修复的代码),它可以正常工作。

谢谢你的帮助!

public void Show_Settings(View v) {
//this is the settings button, whose onclick is identified in menu_thisisatest.xml
    PopupMenu popup = new PopupMenu(this, v);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.menu_thisisatest, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        Intent intent = new Intent(this, Make_a_contact.class);
        return true;
//            @Override
//            public boolean onMenuItemClick(MenuItem item) {
//                Toast.makeText(getApplicationContext(),item.toString(),Toast.LENGTH_SHORT).show();
//            return true;
//        }
    });
    popup.show();
}

生成意图后,您需要开始新的"活动"。尝试调用

startActivity(intent);

当然,您需要将该代码包含在onMenuItemClick()方法中,该方法当前已在代码中注释掉,即

@Override
public boolean onMenuItemClick(MenuItem item) {
    Intent intent = new Intent(this, Make_a_contact.class);
    startActivity(intent);
    return true;
}

关于@Benjamin Scharbau答案的注释,当您使用new Intent(this, Make_a_contact.class)创建intent时,this是对PopupMenu.OnMenuItemClickListener类的匿名实例的引用,该实例不是从Context继承的(这就是错误的原因)。您应该在Intent的构造函数中使用上下文,因此使用对调用(前台)Activity的引用,例如

Intent intent = new Intent(ClassNameOfCallingActivity.this, Make_a_contact.class)

并将CCD_ 11传递给CCD_。

最新更新