2017-08-09 22 views
0

我是新來的Android編程,我想創建一個需要用戶輸入的Android應用程序MainActivity然後在另一個活動中顯示用戶名。我計劃創建5個更多的活動來顯示用戶名。 這是MainActivity發佈一個編輯文本到很多TextViews

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檢查更新答案 – MinnuKaAnae

0

存儲值在意圖;

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'發送/接收額外信息。在那裏並不需要太多的「描述性文本」,因爲OP根本就沒有開始正確的意圖 - 他調用一個創建本地意圖的方法,但是從調用方法 - 'onClick()'方法運行意圖。他的sendName()實現是一種死代碼,因爲它除了創建一個在任何地方都沒有使用的本地對象之外什麼都不做。 – Shark

+0

Thanx Shark plzz upvote upvote my answer。 –

0

如果我理解正確的問題開始當你的活動中,你需要這個。

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

在你onClick方法,你聲明你的:

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

然後在sendName(),您有:

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

你應該明白,這兩個意圖是不一樣的,它們是兩個型動物的對象。一個修改不會影響另一個。

所以你intentonClick沒有被修改。什麼,你想要做的是從sendName返回修改後的意圖,像startIntent(sendName());

此外,你可以只通過intent作爲參數sendName

+0

將'Intent'傳遞給'sendName()'方法聽起來像個不錯的想法。或者在'sendName()'末尾移動'startActivity(intent)''也可以。 – Shark