无法在 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);
}
}
...
}
问题是 itemUrl
在 onOptionsItemSelected
的范围内是 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");
}
我正在尝试用浏览器打开从上一个 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);
}
}
...
}
问题是 itemUrl
在 onOptionsItemSelected
的范围内是 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");
}