Как передать дополнительное намерение двум действиям
У меня есть приложение, которое в первом упражнении запрашивает имя человека на второй странице, оно отображает имя в предложении, я хочу использовать имя в третьем, четвертом или девятом упражнении, как правильно объявить его (общедоступным?) и вызвать его когда и где мне это нужно? это мой код отправки
Главный
public class MainActivity extends Activity {
Button ok;
EditText name;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=(EditText)findViewById(R.id.editText);
Typeface font_a = Typeface.createFromAsset(getAssets(),"fonts/MarkerFelt.ttf");
name.setTypeface(font_a);
ok=(Button)findViewById(R.id.button);
Typefacefont_b=Typeface.createFromAsset(getAssets(),
"fonts/SignPaintersGothicShaded.ttf");
ok.setTypeface(font_b);
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String nameStr = name.getText().toString();
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("NAMEDATA",nameStr);
startActivity(intent);
}
});
}
и это мероприятие 2 получает его
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
t = (TextView)findViewById(R.id.textView3);
Typeface font_b = Typeface.createFromAsset(getAssets(),"fonts/MarkerFelt.ttf");
t.setTypeface(font_b);
String n = this.getIntent().getStringExtra("NAMEDATA");
t.setText(n);
пожалуйста, как бы мне использовать это снова?
3 ответа
Используйте SharedPreferences, чтобы сохранить имя или любую переменную, которая вам нужна, а затем читать, когда вам это нужно. Сначала создайте глобальный в MainActivity, который будет использоваться в качестве имени файла настроек:
public static final String PREFS_NAME = "MyPrefsFile";
Затем, чтобы сохранить:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("name", name);
editor.commit();
загрузить:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
String name = settings.getString("name", "John");
После сохранения префы доступны для любого вида деятельности.
Так что в вашем случае сохраните имя при нажатии кнопки ОК:
ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
String nameStr = name.getText().toString();
SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("name", nameStr);
editor.commit();
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(intent);
}
});
Тогда прочитайте это:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
t = (TextView)findViewById(R.id.textView3);
Typeface font_b = Typeface.createFromAsset(getAssets(),"fonts/MarkerFelt.ttf");
t.setTypeface(font_b);
SharedPreferences settings = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
String n = settings.getString("name", "defaultName");
t.setText(n);
Вы можете сделать то же самое в любой деятельности, которая вам нужна. Смотрите документы здесь.
У вас есть несколько разных подходов для обмена данными между действиями. Я бы сказал, что вы используете, зависит от конечного источника и назначения данных.
- Проход через намерения - это метод, который вы используете в настоящее время. Чтобы продолжить, просто продолжайте передавать имя для следующего намерения.
- Сохранить в SharedPreference - этот метод позволяет сохранить информацию в файле "предпочтений" приложения. Это полезно, если пользователь настраивает профиль или другую полуфиксированную информацию.
- Записать его в БД. Здесь вы должны создать новую таблицу SQLite для информации о пользователе и записать в нее новые строки для имени, пароля и другой информации. Это значительно увеличивает издержки и действительно полезно только в том случае, если в одном приложении несколько пользователей
- Save to singleton - в этом случае вы создаете статический класс с общедоступными свойствами, которые можно установить. Это было бы наименее благоприятно, поскольку вся информация теряется при закрытии приложения, но может быть полезна для временного создания и хранения во многих действиях. Будьте осторожны: плохое программирование может превратить одиночные игры в кошмар
Создайте класс, расширяющийся из класса Application. Реализуйте setter и getter внутри этого класса, как,
public class GlobalClass extends Application {
//create setters and getters here
public void setUserInfo(String userInfo) {
}
public void getUserInfo() {
return userInfo;
}
}
тогда вы можете использовать это из любого вида деятельности, как,
GlobalClass app = (GlobalClass ) getApplication();
app.getUserInfo();