2

У меня есть три Android activity A, B, C.Как вернуться к родительской активности в android?

Я зову B активность от A деятельности:

public void onCreate(){ 

Intent intent = new Intent(A.this, B.class); 
startActivity(intent); 
finish(); 
} 

В OnSuccess из B деятельности я использую Sharedpreference:

protected void onSuccess(Bundle savedInstanceState) { 
    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedpreferences.edit(); 
    /...../ 
    editor.apply() 
} 

Теперь я хочу получить доступ к параметрам sharedPreferences в классе активности A. В каком методе Activity A я получу эти параметры? onSuccess?. После доступа к этим параметрам активность B также вернется к действию A. Как я могу это сделать? Я новичок в Android развития.

#Edit 
public void onCreate(){ 
Intent intent = new Intent(A.this, B.class); 
startActivity(intent); 
finish(); 
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); 
String name = sharedpreferences.getString(Name, ""); 
} 
+0

где ваш тролль активности C? – alex

ответ

6

SharedPreferences имеет область приложения. Поэтому, даже если вы сохраните их в активности, вы можете называть их во всех других действиях вашего приложения.

В каждом упражнении вы можете назвать это для сохранения некоторых префов:

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
editor.putString("Key", "Value"); 
editor.putInt("Key2", Value(int)); 
editor.apply(); 

и всегда от всех видов деятельности, вы можете получить их по телефону:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("Key", null); 
if (restoredText != null) 
{ 
    int Key2= prefs.getInt("Key2", -1); 
    /*if (selectionStart != -1) 
    { 
     //do Something 
    }*/ 
} 

here вы можете найти хорошую руководство для этого, которое объясняет почти все, что вам нужно знать :)

EDIT: ok, это изображение может помочь вам понять жизнь Android цикл:

lifecycle

Поскольку вы хотите вернуться из активности B в активности А вы можете избежать вызова метода finish(); Вы можете сделать следующее:

активность A:

Intent i = new Intent(A.this, B.class); 
startActivity(i); 

Теперь, деятельность будет первым в backstack в приложении ниже B активности.

активность B:

//Do your stuffs 
finish(); 

Сейчас активность B будет закрыт и А снова показал.

Если вы хотите finsh на A активность в любом случае, в B активности, а finish(); вы используете Намерение снова:

Intent i = new Intent(B.this, A.class); 
startActivity(i); 
finish(); 

если вы должны пройти ДАННЫЕ назад к деятельности A, в вызове деятельности по B с использованием startActivityForResult();. here - это документ об этом.

Но если в операции B вам нужно только получить sharedPref и использовать их в A-операции, я предлагаю вам восстановить их непосредственно из A-активности, так как они имеют область приложения.

EDIT2:

Вы можете получить доступ к SharedPrefs в OnCreate(), но только если OnCreate метод вызывается после зр сохраняются.

я предлагаю вам использовать последний метод: вызов B активности с

Intent i = new Intent(A.this, B.class); 
startActivity(i); 
finish(); 

и чем вызов с

Intent i = new Intent(B.this, A.class); 
startActivity(i); 
finish(); 

вы будете иметь sharedPrefs в OnCreate.

Для любого вопроса, я все еще здесь :)

PS: не забудьте проверить всегда если sharedPrefs существует, используя if (sharedPref.contains("Key")){//dosomething}

PPS: sharedPrefs обычно используются только для настройки, если вам нужно чтобы сохранить больше значений, попробуйте взглянуть на sugarORM, чрезвычайно удобную базу данных для ваших приложений.

+0

Спасибо за ваш ответ. После вызова операции 'B' из' A' я хочу вернуть курсор в действие 'A', когда все делается со стороны операции' B'. И после возвращения его в actvity 'A' из' B' я хочу использовать данные Sharedpreference. –

+0

@SnowClue так, просто чтобы узнать, понял ли я: вы хотите получить sharedPref в Activity B и использовать их в Activity A? –

+0

Да, я хочу установить значение в 'B' и использовать его в' A' Activity. Я пробовал использовать код выше (см. Раздел редактирования). После установки точки отладки я обнаружил, что курсор достиг первого 'A.onCreate(). Finish()' than 'B.onSuccess()'. –

Смежные вопросы