2017-08-09 3 views
0

Androidプログラミングの新機能です。MainActivityにユーザ入力が必要なアンドロイドアプリを作成して、別のアクティビティでユーザ名を表示します。私はユーザー名を表示するためにさらに5つのアクティビティを作成する予定でした。 これはMainActivityです:多くのTextViewに編集テキストを配布する

public class MainActivity extends AppCompatActivity { 

Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button) findViewById(R.id.start); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, Quiz1Activity.class); 
      getMenuInflater().toString(); 
      sendName(); 
      startActivity(intent); 
     }}); 
} 

public void sendName(){ 
    Intent intent = new Intent(MainActivity.this, Quiz1Activity.class); 
    EditText inputnama = (EditText) findViewById(R.id.inputnama); 
    intent.putExtra("username", message); 
} 

、これは私が別の新しい活動に同じコードを使用しますが、それは何も表示されませんnew1Activity

Intent username = getIntent(); 
String username1 = getIntent().getStringExtra("username1"); 

です。 誰も私に何が間違っていると説明できますか?

+0

インテントの最初のオブジェクトにデータを入れるだけです。 –

+1

もう少し簡単な解決策は、入力したユーザー名を 'SharedPreferences'に保存し、他のすべてのアクティビティでSharedPreferencesからロードすることです。上記のパラメータのインテントベースのすべての渡しを切り捨てます...しかし、それがプライバシーの問題であるかどうかを判断するのはあなたまたはクライアント次第です。 – Shark

答えて

0
EditText inputName = (EditText) findViewById(R.id.inputnama);  

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     if(inputName != null){ 
      String message = inputName.getText().toString(); 

      SharedPreferences sharedPreferences = getSharedPreferences("prefName", 0); 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putString("username", message); 
      editor.apply(); 
      editor.commit(); 

      startActivity(new Intent(MainActivity.this, Quiz1Activity.class); 
     } 

    }}); 

QuizActivityやその他の活動に

SharedPreferences sharedPreferences = getSharedPreferences("prefName", 0); 
String userName = sharedPreferences.getString("username", ""); 
+0

これは疑問に答えるかもしれませんが、コードに説明を追加する必要があります。来るかもしれない将来のユーザーを考慮してください。また、コードを提供するだけではなく、問題を説明してください。 – Nathan

+0

余分に渡されているこの「メッセージ」は何ですか? – Shark

+1

@Shark check updated answer – MinnuKaAnae

0

Intentに値を格納します。

Intent intent = new Intent(MainActivity.this, Quiz1Activity.class); 
    EditText inputnama = (EditText) findViewById(R.id.inputnama); 
    intent.putExtra("username", inputnama.getText().toString()); 

intentを使用して値を取得します。

Intent intent = new Intent(); 
intent.putExtra("userName", userName); 
startActivity(intent); 

と新しい活動に名を取得する:

getIntent().getExtras().getString("userName"); 
+0

私は十分な説明を追加しました....私はこのトピックを理解するための詳細な説明を追加する必要はないと思う。あなたの注意のためにありがとう –

+0

@Nathanこの答えは、実際に 'Intent's経由でエクストラを送受信する方法を非常にうまく説明しています。 OPは単にローカルのインテントを作成するメソッドを呼び出していますが、呼び出し元のメソッドからインテントを実行しているため、シャドウイングしている 'onClick()'メソッド。彼の 'sendName()'実装は、どこでも使われていないローカルオブジェクトを作成するだけなので、デッドコードの一種です。 – Shark

+0

サンクス・サメは私の答えをupvote plzz。 –

0

あなたはこれを必要とします。あなたのonClick方法で

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new 
       Intent(MainActivity.this,Quiz1Activity.class); 
       getMenuInflater().toString(); 
       EditText inputnama = (EditText) findViewById(R.id.inputnama); 
       intent.putExtra("username", inputnama.getText().toString()); 
       startActivity(intent); 
      }}); 
0

使用このclicklistener私が正しく質問を理解している場合、あなたの活動を開始するときに

String username1 = getIntent().getStringExtra("username"); 
+0

これは疑問に答えるかもしれませんが、コードに説明を追加する必要があります。来るかもしれない将来のユーザーを考慮してください。また、コードを提供するだけではなく、問題を説明してください。 – Nathan

+0

余分に渡されているこの「メッセージ」は何ですか? – Shark

0

、あなたはあなたを宣言:

Intent intent = new Intent(MainActivity.this, Quiz1Activity.class);

はその後sendName()に、あなたが持っている:

Intent intent = new Intent(MainActivity.this, Quiz1Activity.class);を。

これらの2つのインテントは同じではなく、2つの異なるオブジェクトであることを理解する必要があります。一方の変更は他方の変更に影響しません。

intentonClickにあなたの変更がありませんでした。あなたがしたいのは、のような修正されたインテントをsendNameから返すことです。

さらに、にパラメータとしてintentを渡すことができます。

+0

'Intent'を' sendName() 'メソッドに渡すことはまともな考えのように聞こえます。あるいは 'sendActivity(intent);'を 'sendName()'の最後に動かすこともできます。 – Shark

関連する問題