2011-11-13 10 views
7

私はAndroidプログラミングを始めようとしています。私は本からいくつかの例を取っ​​ています。バンドルオブジェクトが、この場合には常にnullであるなぜ私が疑問に思うonCreate()でBundleオブジェクトが常にnullになるのはなぜですか?

public class ExemploCicloVida extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     Log.i(TAG, getClassName() + " onCreate() called on: " + icicle); 

     TextView t = new TextView(this); 
     t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat"); 
     setContentView(t); 
    } 
} 

:これらの例の上で は、次のコードを配置することが要求されます。

答えて

13

以前に保存された状態がない場合、バンドルはnullになります。

これはActivity API documentationに記載されています。

2

このコードを実行し、Ctrl + F11を押して画面を回転させます。バンドルはnullにはなりません。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (savedInstanceState != null) { 
     Toast.makeText(this, savedInstanceState.getString("s"), 
       Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    outState.putString("s", "hello"); 
} 

onSaveInstanceState(Bundle)が呼び出されます。次に、アクティビティオブジェクトが作成され、がnull以外で呼び出されます。Bundle savedInstanceState私の場合は

+1

おかげでwannik:この機能を使用してください。 APIは私に手がかりとあなたのものを与えました、私は自分のコードでCtrl + F11をタイプしました。そして、icicleはもはやnullではありませんでした。 –

8

、その理由は、特定の活動は、マニフェストファイルで宣言されたテーマを持っていなかったということでした。この問題を解決するには

、オープンAndroidManifest.xmlに、アプリケーションノードでクラッシュアクティビティを選択し、属性のテーマ分野にテーマを追加し、[アプリケーション]をクリックします。私の場合は、

@style/Theme.AppCompat.Light.DarkActionBar 

でしたが、他のアクティビティからテーマをコピーできます。

P.S:私は、これは古い質問への答えですけど、私は修正を検索しながら、それにつまずいてきたし、これは他の人を助けるかもしれないので、実用的なソリューションを見つけることができませんでした。

+1

これにご協力いただきありがとうございます!あなたは私に多くの頭痛を救った...私は以前の活動でテーマを変更したが、ヌルポインタを取得していた活動では変更しなかった!私はこれが問題であることを夢にも思わなかったでしょう!もう一度... cead mile failte! –

+0

大歓迎です!私はそれを把握するために多くの時間を無駄にしたので、誰かがこのすべてを通過しないように助けてくれたことをうれしく思います! –

0

あなたのアクティビティに入るパラメータを読みたいと思います。

protected String getStringExtra(Bundle savedInstanceState, String id) { 
String l; 
l = (savedInstanceState == null) ? null : (String) savedInstanceState 
      .getSerializable(id); 
if (l == null) { 
    Bundle extras = getIntent().getExtras(); 
    l = extras != null ? extras.getString(id) : null; 
} 
return l; 
} 
関連する問題