Как передать дополнительное намерение двум действиям

У меня есть приложение, которое в первом упражнении запрашивает имя человека на второй странице, оно отображает имя в предложении, я хочу использовать имя в третьем, четвертом или девятом упражнении, как правильно объявить его (общедоступным?) и вызвать его когда и где мне это нужно? это мой код отправки

Главный

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();
Другие вопросы по тегам