9

私はAndroidプログラミングを始めようとしていますが、本からいくつかの例を取り上げています。これらの例では、次のコードを入力する必要があります。

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);
    }
}

この場合、なぜBundleオブジェクトが常にnullになるのだろうか。

4

5 に答える 5

16

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

これは、ActivityAPIドキュメントに記載されています。

于 2011-11-13T03:05:51.623 に答える
10

私の場合、その理由は、特定のアクティビティにマニフェスト ファイルで宣言されたテーマがなかったためです。

これを修正するには、AndroidManifest.xml を開き、[アプリケーション] をクリックして、[アプリケーション ノード] でクラッシュしているアクティビティを選択し、[属性] の [テーマ] フィールドにテーマを追加します。私の場合はそうでした

@style/Theme.AppCompat.Light.DarkActionBar

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

PS: これは古い質問への回答であることはわかっていますが、修正を探しているときに偶然見つけて、有効な解決策が見つからなかったため、他の人に役立つかもしれません。

于 2014-02-05T21:03:30.650 に答える
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)が呼び出されます。次に、アクティビティ オブジェクトが作成され、onCreated(Bundle)null 以外で呼び出されますBundle savedInstanceState

于 2011-11-13T03:28:29.850 に答える
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;
}
于 2014-05-14T04:58:34.043 に答える