このクラスでは、onSaveInstanceStateメソッドとonRestoreInstanceStateメソッドの両方をオーバーライドしています。もし私が他の活動にナビゲートした場合、、または私の装置のHomeに行きましたが、最新の状態を維持せず、新しい状態を開始しません。どのようにonSaveInstanceStateアクティビティが破棄または停止した場合でも、アクティビティの最新の状態を維持する方法
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("mylist",mAdapter);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
savedInstanceState.getSerializable("mylist");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ex) {
// Ignore
}
//setHasOptionsMenu(true);
recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
if (savedInstanceState != null && savedInstanceState.getSerializable("mylist")!=null) {
savedInstanceState.getSerializable("mylist");
update_START();
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(mAdapter);
}else {
update_START();
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(mAdapter);
}
}
すべてのボディは、私が他の活動へのコードのいずれかのブロックを追加する必要があります私は、アクティビティが破棄された場合でも、最新の状態を保つために、私の活動をinforceに追加すべきか私に言うことができますか?次のように
私onPostExecute方法は次のとおりです。
@Override
protected void onPostExecute(ArrayList<MovieEntity> result) {
mAdapter=null;
mAdapter = new ImagesAdapter(getBaseContext(), result);
recyclerView.setAdapter(mAdapter);
}
これは私たManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.prof_mohamed.movieapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver
android:name=".ConnectivityReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:label="Pop Movies">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DetailActivity" android:label="MovieDetail"></activity>
</application>
ことが想定されている私はその後、活動の間、あるいは他のアプリケーション間を移動するとき最初の実行中のアプリに戻ると、他のアクティビティやアプリへのナビゲーションを開始する前に、最新の保存済み状態を復元する必要があります。
はマニフェストを投稿してください –
@DavidWasser自分の投稿を編集してManifest.xmlファイルを追加しました。マニフェストファイルの現在の状態を確認してください。 –
開発者のオプション「活動をしないでください」を有効にしましたか?それぞれのアクティビティで 'onDestroy()'にログを追加し、このメソッドが呼び出されているかどうか確認してください。あなたのコードやマニフェストには何も変わったものはありません。実際のデバイスやエミュレータでテストしていますか? –