无法在 android activity 中的 onOptionsItemSelected 中访问成员变量

Unable to access member variable in onOptionsItemSelected in android activity

我正在尝试用浏览器打开从上一个 activity 传递过来的某个 URL。点击右侧的重定向图标,打开预期的网页。

这是我的代码。

public class DetailedProduct extends AppCompatActivity {
    private Menu menu;
    private String itemId;
    private String itemUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d("DetailedProduct-LifeCycle","------------onCreate------------");
        setTheme(R.style.AppTheme);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detailed_product);
        Intent intent = getIntent();
        String itemId = intent.getStringExtra("itemId");
        String itemUrl = intent.getStringExtra("itemUrl");
        Log.d("itemUrl", itemUrl);
        ActionBar actionBar = getSupportActionBar();
//        actionBar.setDisplayHomeAsUpEnabled(true);
        setTitle(itemId);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        Log.v("Menu","----------menuCreate----------");
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.detail_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.v("Menu", "-----------menuSelect---------");
        if(itemUrl==null){
            Log.v("Menu", "---------Cannot acquire predefined itemUrl---------");
        }
        else{
            Log.d("itemUrlInner", itemUrl);
        }

        switch(item.getItemId()){
            case R.id.redirect:

                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(this.itemUrl));
                startActivity(browserIntent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    ...
}

问题是 itemUrlonOptionsItemSelected 的范围内是 null

我已经在 onCreate 中为 itemUrl 赋值。但是,如日志所示,它是 null.

希望得到您的帮助。非常感谢! :-)

您正在为 String itemUrl = intent.getStringExtra("itemUrl");(局部变量,一旦其作用域确定就结束其生命)赋值,但从 this.itemUrl(您的托管实体的字段)读取它。您需要在同一个地方写入和读取。

onCreate 方法中,您使用的是局部变量。

private String itemUrl;

protected void onCreate(Bundle savedInstanceState) {
    ....
    //String itemUrl = intent.getStringExtra("itemUrl");  //It is a different variable!
    itemUrl = intent.getStringExtra("itemUrl");
}