我正在一個項目中進行兩項活動,一項顯示數據庫中的行的列表,當您單擊一個項時,它將打開一個包含可編輯元素的窗體的其他活動;如何確保finish()銷燬活動並清除所有變量?
問題是,當我關閉第二個活動並重新打開它(即使我打電話給finish()
),某些變量保留了上次「會話」的數據。
所以可能的問題是:如何清除所有變量/銷燬活動?
編輯
正如我一直在讀書,並努力我仍然無法計算出真正的問題,所以有一些額外的信息:
- 自定義控制器我使用
public class CustomEditText extends EditText {
private boolean edited=false;
private boolean init;
private boolean justLoad;
private String oldText;
public boolean required;
public boolean isEdited() {
return edited;
}
public String getOldText() {
return oldText;
}
public CustomEditText(Context context) {
super(context);
}
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
if (justLoad) {
edited=false;
justLoad=false;
} else {
String currtext = this.getText().toString();
if (!init) {
oldText = currtext;
init = true;
}
if (!currtext.equals(oldText)) {
edited = true;
} else {
edited = false;
}
}
Log.d("cet",this.getText().toString()+" != "+oldText+" "+edited);
}
public void load(String text){
init=true;
oldText=text;
edited=false;
justLoad=true;
this.setText(text);
}
}
-Utility類(也試過非靜態的
public class CustomViewUtilities {
private static boolean edited=false;
private static ArrayList<EditText> list = new ArrayList<>();
public static boolean isAnyEdited(ViewGroup view){
CustomViewUtilities c = new CustomViewUtilities();
c.traverseEditTexts(view);
return edited;
}
public static ArrayList<EditText> getList(ViewGroup view) {
list.clear();
CustomViewUtilities c = new CustomViewUtilities();
c.traverseEditTexts(view);
return list;
}
private EditText traverseEditTexts(ViewGroup v)
{
EditText invalid = null;
for (int i = 0; i < v.getChildCount(); i++)
{
Object child = v.getChildAt(i);
if (child instanceof EditText)
{
EditText e = (EditText)child;
if (e instanceof CustomAutoCompleteTextView){
list.add(e);
if (((CustomAutoCompleteTextView) e).isEdited()) {
edited = true;}
} else if (e instanceof CustomEditText) {
if (((CustomEditText) e).isEdited()) {
edited = true;}
list.add(e);
}
}
else if(child instanceof ViewGroup)
{
invalid = traverseEditTexts((ViewGroup)child); // Recursive call.
if(invalid != null)
{
break;
}
}
}
return invalid;
}
}
我也試圖改變android:launchMode
沒有結果。 問題是,如果CustomViewUtilities.isAnyEdited(view);
方法在下一次該活動啓動時任何時候返回true,則我第二次啓動活動。
任何幫助表示讚賞。
你不需要完成你的活動..使用setNotifyDataChange對知識 –
閱讀關於' ' –
xAqweRx
set launchMode to standard may help – jfxu