Я работаю над проектом с двумя действиями, один показывает список строк из базы данных, когда вы нажмете один, он открывает другую деятельность с формой, содержащей элементы, которые вы можете редактировать;Как обеспечить, чтобы finish() уничтожил активность и очистил все переменные?
Проблема в том, что когда я закрываю второе действие и снова открываю его (даже если я вызываю finish()
), некоторые переменные сохраняют данные из последнего «сеанса».
Так может возникнуть вопрос: как я могу очистить все переменные/уничтожить активность?
EDIT
Как я продолжаю читать и пытаться я до сих пор не могу понять реальную проблему таким образом, есть некоторая дополнительная информация:
-Custom контроллеры Я использую
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 on adepter –
читать о ' ' –
xAqweRx
set launchMode to standard может помочь – jfxu