1

最初のアクティビティで 2 番目のページに人の名前を尋ねるアプリがあります。それは文に名前を表示します。3 番目の 4 番目または 9 番目のアクティビティで名前を使用したいのですが、どうすればそれを適切に宣言 (パブリック?) して呼び出すことができますか?いつ、どこで必要ですか?これはそれを送信する私のコードです

主要

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

どうすればこれを再利用できますか?

4

3 に答える 3

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

必要なすべてのアクティビティで同様に行うことができます。こちらのドキュメントを参照してください。

于 2014-01-10T22:39:48.443 に答える
1

アクティビティ間でデータを共有するには、さまざまな方法があります。どちらを使用するかは、データの最終的なソースと宛先によって異なります。

  • パススルー インテント- これは現在使用している方法です。続行するには、名前を次のインテントに渡し続けます。
  • SharedPreference に保存- この方法では、情報をアプリケーションの「設定」ファイルに保存します。これは、ユーザーがプロファイルまたはその他の半固定情報を設定している場合に役立ちます。
  • DB に書き込む- ここでは、ユーザー情報用の新しい SQLite テーブルを作成し、名前、パスワード、およびその他の情報用に新しい行をそれに書き込みます。これにはオーバーヘッドが大きくなり、同じアプリケーションに複数のユーザーがいる場合にのみ役立ちます
  • シングルトンに保存- この場合、設定可能なパブリック プロパティを持つ静的クラスを作成します。これは、アプリケーションの終了時にすべての情報が失われるという点で最も好ましくありませんが、多くのアクティビティで一時的な作成と保持に役立つ可能性があります。警告: 悪いプログラミングはシングルトンを悪夢にする可能性があります
于 2014-01-10T22:58:53.417 に答える
0

Application クラスを拡張したクラスを作成します。そのクラス内にセッターとゲッターを次のように実装します。

  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();
于 2014-01-10T22:58:22.493 に答える