Android 如何将额外的意图传递给两个活动

Android 如何将额外的意图传递给两个活动,android,android-intent,getstring,Android,Android Intent,Getstring,我有一个应用程序,在第一个活动中询问第二页上的人员姓名,在第三个、第四个或第九个活动中显示姓名,我想在第三个、第四个或第九个活动中使用该姓名,我如何正确地声明该姓名(公开?),并在需要时何地调用该姓名?这是我发送的代码 主要 这是活动2接收它 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layo

我有一个应用程序,在第一个活动中询问第二页上的人员姓名,在第三个、第四个或第九个活动中显示姓名,我想在第三个、第四个或第九个活动中使用该姓名,我如何正确地声明该姓名(公开?),并在需要时何地调用该姓名?这是我发送的代码

主要

这是活动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);

那么,我该如何重用它呢?

使用SharedReferences保存名称或您需要的任何变量,然后在需要时读取。首先,在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");
保存后,每个活动都可以访问PREF

因此,在您的情况下,按下“确定”按钮时保存名称:

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);

你可以在你需要的每一项活动中做同样的事情。请参阅文档。

使用SharedReferences保存名称或所需的任何变量,然后在需要时读取。首先,在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");
保存后,每个活动都可以访问PREF

因此,在您的情况下,按下“确定”按钮时保存名称:

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);

你可以在你需要的每一项活动中做同样的事情。请参阅文档。

创建从应用程序类扩展而来的类。 在该类中实现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();

创建从应用程序类扩展而来的类。 在该类中实现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();

您有许多不同的方法在活动之间共享数据。我想说,您使用哪一种取决于数据的最终来源和目的地

  • 传递意图-这是您当前使用的方法。要继续,只需将名称传递给下一个意图
  • -此方法可将信息保存到应用程序的“首选项”文件中。如果用户正在设置配置文件或其他半固定信息,这将非常有用
  • -在这里,您将为用户信息创建一个新的SQLite表,并在其中写入新的行,以显示名称、密码和其他信息。这会带来更多的开销,并且只有在同一个应用程序中有多个用户时才有用
  • 保存到单例-在本例中,您创建了一个具有可设置的公共属性的静态类。这对应用程序关闭时丢失所有信息是最不利的,但对于跨多个活动的临时创建和保留可能很有用
您有许多不同的方法在活动之间共享数据。我想说,您使用哪一种取决于数据的最终来源和目的地

  • 传递意图-这是您当前使用的方法。要继续,只需将名称传递给下一个意图
  • -此方法可将信息保存到应用程序的“首选项”文件中。如果用户正在设置配置文件或其他半固定信息,这将非常有用
  • -在这里,您将为用户信息创建一个新的SQLite表,并在其中写入新的行,以显示名称、密码和其他信息。这会带来更多的开销,并且只有在同一个应用程序中有多个用户时才有用
  • 保存到单例-在本例中,您创建了一个具有可设置的公共属性的静态类。这对应用程序关闭时丢失所有信息是最不利的,但对于跨多个活动的临时创建和保留可能很有用
一次会话或用户打开应用程序时,您是否需要该名称?一次会话或用户打开应用程序时,您是否需要该名称?如果您在MainActivity中声明了该名称,请在其他活动中这样调用:MainActivity.PREFS\u NAMEsorry您能详细说明吗@Melquiadesmy fault忘记了公共静态最终字符串PREFS_NAME=“MyPrefsFile”;抱歉,这太棒了,顺便说一句,谢谢你花时间@Melquiadessory i get defaultName出现在Activity2中?我还有一个关于SharedReferenceEdit()没有commit()调用的警告?如果你在MainActivity中声明了它,那么在其他活动中可以这样调用:MainActivity.PREFS_NAMEsorry你能详细说明一下吗@Melquiadesmy fault忘记了公共静态最终字符串PREFS_NAME=“MyPrefsFile”;抱歉,这太棒了,顺便说一句,谢谢你花时间@melquiadessory i get defaultName出现在Activity2?我还有一个关于SharedReferenceEdit()的警告,没有commit()调用?