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

时间:2014-01-10 22:33:27

标签: android android-intent getstring

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

主要

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 个答案:

答案 0 :(得分: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");

保存后,每个活动都可以访问prefs。

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

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

您可以在所需的每项活动中做同样的事情。请参阅文档here

答案 1 :(得分:1)

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

  • 传递意图 - 这是您当前使用的方法。要继续,请继续将名称传递给下一个意图。
  • Save to SharedPreference - 此方法可将信息保存到应用程序的“首选项”文件中。如果用户正在设置配置文件或其他半固定信息,这将非常有用。
  • Write it to a DB - 在这里,您将为用户信息创建一个新的SQLite表,并为其写入新的行,以获取名称,密码和其他信息。这有更多的开销,只有在同一个应用程序中有多个用户时才真正有用
  • 保存到单件 - 在这种情况下,您将创建一个具有可设置的公共属性的静态类。这对于应用程序关闭时丢失的所有信息都是最不利的,但对于许多活动的临时创建和保留可能是有用的。 Be warned: bad programming can make singletons a nightmare

答案 2 :(得分:0)

创建从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();