Approid EditTextがアプリの再開時に入力を失うことがあります
-
02-01-2020 - |
質問
私は基本的なデータロギングアプリを作りました。これは、ユーザー入力値を動的で多数のEditTextビューに入れることになっています。ユーザーがすべてのデータを入力し終えたら、データ入力の写真を撮るボタンを押すことができます(入力として入力を保存することについて、具体的な理由があります)、画像を保管に保存します。 。
問題: 特定の問題を除いて、それは非常にうまく機能します。翌日、ユーザーが携帯電話をアイドルに入れたとき(入力が実際に保存される前に頻繁に発生する)、edittextビューのすべての入力はすべてクリアされます(非常に怒っている/悲しい人にします)。さらに、私がフィールドにいるときにのみ発生し、Eclipse内のログファイルを見ることができなくなり、通常よりも違う方法を把握することができません。
質問: 私のeditittextの値がアイドル状態にあるときにほとんどの時間が持続しているのはなぜそれでも、まだランダムな(そしてしばしば不便な)機会にクリアしているのですか?
私は、これがある場合には、ONSTOP()がonpause()(またはおそらくその逆)の代わりに呼び出されたという感覚を持っていますが、これらの方法についての私の知る限りではまだ速度まではありません。また、この問題はSharedPreferencesファイル(またはそのようなアイデア)を介して解決できることを知っていますが、他の何よりも理解するために何が起こっているのか知りたいのですが。
詳細:
- このコードのいずれかが意味のある方法で質問に関連する可能性があるかどうかわからないが、それが役立つなら私のoncreate()メソッドのスニペットを含めます。他に何かを追加する必要があるかどうか教えてください。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_input_param);
Intent intent = getIntent();
//Rest of the code just builds the layout from data taken from the intent
.
iは、oncreate()を除いて、ライフサイクルメソッド(onstop()、onresume()など)をオーバーライドさせていません。私の活動の中で他の方法のどれも問題と関係があるべきではありません/私ができる限り
解決
私は、あなたのアプリが「アイドル」になっている時に(すなわち、背景の画面に行き、画面がオフにしている)という問題は、あなたのEditTexts
のそれを含むすべてのデータを削除することです。
アクティビティが一時停止または停止している場合、システムはそれを終了するように尋ねるか、単にそのプロセスを殺すことによって、メモリからのアクティビティを削除することができます。ユーザーに再表示されると、それを完全に再起動して以前の状態に復元する必要があります。
http://developer.android.com/reference/android/app. /活動化.html
この問題を解決するために、onSavedInstanceState()
メソッドを上書きしてEditText
の値を保存してからonCreate()
がアクティビティに戻ると、それらの値を元に戻します。その後、それらの値からEditTexts
を再配置する必要があるかどうか、またはNULLの場合は、チェックインの場所が必要です。この
他のヒント
これはおそらく起こっていますが、ondestroyまたはonpauseメソッドがアイドル時間で呼ばれます。ondestroyはケースで呼ばれ、メモリはアプリの使用量が多いです。私の意見の唯一の解決策は、それが入力されているようにローカルDB内のデータを保存し、それをOnResumeに挿入することです。
あなたの活動の方法であなたの問題を解決するために、静的変数でユーザーによって挿入された値を取ります(あなたはedittextの数を持っている数の変数の数を必要とする)、そして値を変数とonResumeに格納する必要があるでしょう()値をedittextに戻す。
package com.zeus.program;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.EditText;
public class MainActivity extends Activity {
public static String username;
public static String password;
EditText usernameET;
EditText passwordET;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
usernameET = findViewById(R.id.username);
passwordET = findViewById(R.id.password);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
usernameET.setText(username);
passwordET.setText(password);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
username = usernameET.getText().toString();
password = passwordET.getText().toString();
}
}
.