私は、HTC Desire (Gingerbread 2.3.7) と Google Nexus 7 (Jelly Bean 4.3) で開発している Android プロジェクトに取り組んでいます。MainActivity から InfoActivity にデータを送信する必要があるため、インテントを使用します。この InfoActivity では、アクション バーに情報を更新するためのメニュー項目もあります。
InfoActivity では、ユーザーにデータを表示します。しかし、これは問題ではなく、問題はメニューにあります。次のコードを見てください。
public class ShowInfoActivity extends ActionBarActivity {
private MenuItem menuItem = null;
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
new OneTask().execute(...);
// ...
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
case R.id.refresh:
menuItem = item;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private class OneTask extends AsyncTask<Object, Void, String> {
// ...
@Override
protected void onPreExecute() {
MenuItemCompat.setActionView(menuItem,
R.layout.actionbar_indeterminate_progress);
MenuItemCompat.expandActionView(menuItem);
}
// ...
@Override
protected void onPostExecute(String result) {
MenuItemCompat.collapseActionView(menuItem);
MenuItemCompat.setActionView(menuItem, null);
}
}
明らかに、最初に実行されたときは menuItem=null なので、クラッシュするはずです。信じられないことに、HTC では正常に動作しますが、Nexus では明らかにクラッシュします。これがデバイス間で異なるのはなぜですか?
PS:私はすでに解決しましたが、なぜこの動作が起こるのか知りたいです...