2014-01-10 69 views
1

我有一個應用程序,在第一個活動詢問第二個頁面上的人名,它顯示了一個句子中的名字我想在第三個第四或第九個活動中使用該名稱我正確地聲明它(公共?),並在任何時候,何地需要它時調用它?這是我的代碼發送它如何將額外的意圖傳遞給兩個活動

主要

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

所以請如何將我重用這個?

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

保存之後,首選項是每個活動都可以訪問。

所以你的情況,當按下OK按鈕保存名稱:

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

+0

我無法解析符號PREFS_NAME – martinseal1987

+0

如果您在MainActivity中聲明瞭它,則在其他活動中調用如下所示:MainActivity.PREFS_NAME – Melquiades

+0

對不起,您可否詳細說明一下? @Melquiades – martinseal1987

0

創建從應用程序類擴展的類。 實現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(); 
1

你有許多不同的方法來共享活動之間的數據。我會說你使用哪一個取決於數據的最終來源和目的地。

  • 傳遞意圖 - 這是您正在使用的方法。繼續,繼續傳遞名稱到下一個意圖。
  • Save to SharedPreference - 此方法將信息保存到應用程序的「首選項」文件中。如果用戶正在設置配置文件或其他半固定信息,這很有用。
  • Write it to a DB - 在這裏,您將爲用戶信息創建一個新的SQLite表併爲其寫入名稱,密碼和其他信息的新行。這有更多的開銷,只有當你有多個用戶在同一個應用程序時纔有用
  • 保存到一個單例 - 在這種情況下,你創建一個靜態類,可以設置公共屬性。這對於在申請結束時丟失的所有信息都是最不利的,但對於跨多項活動的臨時創建和保留可能有用。 Be warned: bad programming can make singletons a nightmare
相關問題